yaml-cpp以什么顺序返回数据?

时间:2019-05-09 10:55:34

标签: c++ yaml-cpp

我编写了以下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> >();
...

如果我打印nameparameters值(按获取顺序),则输出为:

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]

有人可以向我解释发生了什么,并建议我如何解决此问题?

谢谢。

1 个答案:

答案 0 :(得分:3)

YAML映射不允许包含duplicate keys,因此YAML文件实际上是非法的。 yaml-cpp在这里只是宽大而不会报告错误。

此外,YAML映射未指定key order,因此yaml-cpp仅选择内部最方便的任何顺序进行迭代。最好假设 unspecified 顺序表示随机顺序,即您不能依赖它。