我有以下YAML(我的情況的簡化版本):解析C++中詞典的YAML列表
---
my_list:
- item1:
name: name1
- item2:
name: name2
然後我試圖解析它這樣使用C++和YAML-CPP:
for (const auto & p : node["my_list"]) {
std::cout << p.IsMap() << std::endl;
YAML::Node key = p.first;
YAML::Node value = p.second;
}
這顯然作品(IsMap()
1的回報),但只要我做的:p.first.as<std::string>();
崩潰。我應該如何解析這個?
相反,如果我這樣做:
for (auto it = node.begin(); it != node.end(); ++it) {
YAML::Node key = it->first;
YAML::Node value = it->second;
std::cout << key.as<std::string>() << std::endl;
}
和輸出這裏是my_list
,這樣我就可以繼續進行解析。
我的問題是:如何解析使用C++11
範圍for循環?由於
你確定p是一對,而不是有第一個和第二個可轉換爲YAML :: Nodes的東西嗎? –
Caleth
不,我不確定。我不清楚YAML-CPP庫。我試過其他的東西,比如'p.as()'。如果我做字典詞典很容易解析,但由於某種原因,列表不是。 –
我終於找到答案了,儘管我不知道爲什麼!看來'for(const auto&p:node [「my_list」])'返回列表本身,所以你可以做'p [0],p [1] ...'。字典是列表的一個元素,所以每個字典都需要另一個for循環:'for(const auto&elem:p)'。如果沒有人提供更好的答案和更好的解釋,我會寫這個答案。 –