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> >();
...
如果我打印 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]
谁能解释一下发生了什么并建议我如何解决这个问题?
谢谢。
【问题讨论】:
它按照源文件的写入顺序解析。不存在其他实际可能性。它如何返回节点序列是另一回事。 【参考方案1】:YAML 映射不允许有duplicate keys,这样 YAML 文件实际上是非法的。 yaml-cpp这里简直是宽松,不报错。
更重要的是,YAML 映射没有指定 key order,因此 yaml-cpp 只是选择内部最方便的顺序进行迭代。最好假设 unspecified 顺序意味着 random 顺序,也就是说,您不能依赖它。
【讨论】:
以上是关于yaml-cpp 以啥顺序返回数据?的主要内容,如果未能解决你的问题,请参考以下文章
Android:Sqlite 数据库 getMaximumSize() 以啥单位返回大小?