有没有办法确定YAML列表中的项目数,或使用新的yaml-cpp api检查条目是否存在?例如,假设我有清单
Food:
- pizza: 270
- ice_cream: 90
- fruit: 30
如何确定食物的数量?另外,有没有办法检查YAML字符串中是否存在食物?我知道我可以尝试索引像root_node["Foods"]["fruit"].as<int>()
这样的食物,如果水果不存在则捕获异常,但是在旧的api(http://code.google.com/p/yaml-cpp/wiki/HowToParseADocument)中是否存在类似于FindValue()的函数来检查如果存在条目?
答案 0 :(得分:1)
要获得食物数量,请使用
root_node["Food"].size();
检查食物是否存在在您的示例中有点棘手,因为它是一系列地图,每个地图都有一个键/值对。 (这通常用于创建有序地图。)您只需遍历每个条目并检查它是否是您想要的:
bool does_food_exist(const std::string& name) {
for(std::size_t i=0;i<root_node["Food"].size();i++) {
if(root_node["Food"][i][name])
return true;
}
return false;
}
如果您的意思是实际拥有实际地图,那么您的YAML文件应如下所示:
Food:
pizza: 270
ice_cream: 90
fruit: 30
在这种情况下,检查食物是否存在很容易:
if(root_node["Food"]["fruit"]) {
// "fruit" exists
} else {
// it doesn't exist
}