【问题标题】:In which order yaml-cpp returns data?yaml-cpp 以什么顺序返回数据?
【发布时间】:2019-05-09 10:55:33
【问题描述】:

我写了以下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]

谁能解释一下发生了什么并建议我如何解决这个问题?

谢谢。

【问题讨论】:

  • 它按照源文件的写入顺序解析。不存在其他实际可能性。它如何返回节点序列是另一回事。

标签: c++ yaml-cpp


【解决方案1】:

YAML 映射不允许有duplicate keys,这样 YAML 文件实际上是非法的。 yaml-cpp这里简直是宽松,不报错。

更重要的是,YAML 映射没有指定 key order,因此 yaml-cpp 只是选择内部最方便的顺序进行迭代。最好假设 unspecified 顺序意味着 random 顺序,也就是说,您不能依赖它。

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2015-07-05
    相关资源
    最近更新 更多