如何用C++从YAML文件中提取指定类别下的子项名称?
如何用C++ yaml-cpp提取YAML映射中的键名到字符串向量
我来帮你搞定这个yaml-cpp的解析问题~你当前的代码问题在于:当遍历Food对应的映射节点时,每个循环变量n是键值对节点(而非单纯的键字符串),直接调用n.as<std::string>()会因为节点类型不匹配而失败。
修正后的代码
只需要在循环中获取键值对的first部分(即食物名称对应的键节点),再转换为字符串即可:
YAML::Node node = YAML::LoadFile(configYamlPath)["Food"]; std::vector<std::string> items; // 遍历Food下的所有键值对 for (const auto& keyValuePair : node) { // 提取键(食物名称)并加入向量 items.push_back(keyValuePair.first.as<std::string>()); }
原理说明
在yaml-cpp中,映射类型的YAML::Node遍历返回的是std::pair<YAML::Node, YAML::Node>类型的元素:
first:对应映射中的键节点(也就是你需要的Apple、BellPepper这些名称)second:对应键关联的值节点(比如Apple下的Type列表)
这样修改后,你的items向量就会正确包含["Apple", "BellPepper", "Sandwich"],完全符合需求。
内容的提问来源于stack exchange,提问作者Noel Bahdy
相关产品推荐
相关产品推荐

