我编写了以下yaml文件:
linear: [0.0,1.0,10.0,0.05]
linear: [1.0,0.5,5.0,0.05]
rotational: [0.0,6.28,20,0.5]
rotational: [6.28,0.0,20,0.5]
并且我使用yaml-cpp来解析以下代码:
YAML::Node sequence = YAML::LoadFile(filename_);
int count = 1;
for (YAML::const_iterator it = sequence.begin(); it != sequence.end(); ++it)
{
const std::string& name = it->first.as<std::string>();
const std::vector<double>& parameters = it->second.as<std::vector<double> >();
...
如果我打印name
和parameters
值(按获取顺序),则输出为:
linear: [0,1,10,0.05]
rotational: [6.28,0,20,0.5]
linear: [1,0.5,5,0.05]
rotational: [0,6.28,20,0.5]
有人可以向我解释发生了什么,并建议我如何解决此问题?
谢谢。
答案 0 :(得分:3)
YAML映射不允许包含duplicate keys,因此YAML文件实际上是非法的。 yaml-cpp在这里只是宽大而不会报告错误。
此外,YAML映射未指定key order,因此yaml-cpp仅选择内部最方便的任何顺序进行迭代。最好假设 unspecified 顺序表示随机顺序,即您不能依赖它。