使用yaml-cpp new api确定列表中的项目数

时间:2012-06-13 20:11:04

标签: yaml-cpp

有没有办法确定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()的函数来检查如果存在条目?

1 个答案:

答案 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
}