yaml-cpp 以啥顺序返回数据?

Posted

技术标签:

【中文标题】yaml-cpp 以啥顺序返回数据?【英文标题】: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]

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

谢谢。

【问题讨论】:

它按照源文件的写入顺序解析。不存在其他实际可能性。它如何返回节点序列是另一回事。 【参考方案1】:

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

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

【讨论】:

以上是关于yaml-cpp 以啥顺序返回数据?的主要内容,如果未能解决你的问题,请参考以下文章

Android:Sqlite 数据库 getMaximumSize() 以啥单位返回大小?

OpenCV 的 HoughLines 以啥顺序列出 [rho,theta] 矩阵中检测到的线?

$ajax默认以啥方式请求数据

在yaml-cpp中为yaml变量返回bool的任何方法?

PL/SQL 异常以啥顺序引发?

beforeEach 和 beforeAll 以啥顺序执行?