Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Yaml cpp(新API)-嵌套映射/序列组合和迭代_C++_Yaml Cpp - Fatal编程技术网

C++ Yaml cpp(新API)-嵌套映射/序列组合和迭代

C++ Yaml cpp(新API)-嵌套映射/序列组合和迭代,c++,yaml-cpp,C++,Yaml Cpp,我在这个api处理映射和序列时遇到了一些基本问题。假设我有以下结构: foo_map["f1"] = "one"; foo_map["f2"] = "two"; bar_map["b1"] = "one"; bar_map["b2"] = "two"; 我希望将此文件转换为以下YAML文件: Node: - Foo: f1 : one f2 : two - Bar: b1 : one b2 : two 我会这样做: node.

我在这个api处理映射和序列时遇到了一些基本问题。假设我有以下结构:

foo_map["f1"] = "one";
foo_map["f2"] = "two";
bar_map["b1"] = "one";
bar_map["b2"] = "two";
我希望将此文件转换为以下YAML文件:

Node: 
    - Foo:
      f1 : one
      f2 : two
    - Bar:
      b1 : one
      b2 : two
我会这样做:

node.push_back("Foo");
node["Foo"]["b1"] = "one";
...
node.push_back("Bar");
然而,在最后一行,节点现在已经从序列转换为映射,我得到一个异常。我能做到这一点的唯一方法是输出地图:

Node:
    Foo:
      f1 : one
      f2 : two
    Bar:
      b1 : one
      b2 : two
问题是如果我不能读回这样的文件。如果我在节点上迭代,我甚至无法获得节点迭代器的类型而不获得异常

YAML::Node::const_iterator n_it = node.begin();

for (; n_it != config.end(); n_it++) {
        if (n_it->Type() == YAML::NodeType::Scalar) {
            // throws exception
        }
    }
这应该是非常简单的处理,但一直让我疯狂

YAML文件

Node: 
    - Foo:
      f1 : one
      f2 : two
    - Bar:
      b1 : one
      b2 : two

可能不是你所期望的。它是一个映射,具有单个键/值对;键为
节点
,值为序列;该序列的每个条目都是一个具有三个键/值对的映射,并且与
Foo
相关联的值为空。最后一部分可能不是您所期望的。我猜你想要更像你实际得到的东西,即:

Node:
    Foo:
      f1 : one
      f2 : two
    Bar:
      b1 : one
      b2 : two
现在的问题是如何解析这个结构

YAML::Node root = /* ... */;
YAML::Node node = root["Node"];

// We now have a map node, so let's iterate through:
for (auto it = node.begin(); it != node.end(); ++it) {
  YAML::Node key = it->first;
  YAML::Node value = it->second;
  if (key.Type() == YAML::NodeType::Scalar) {
    // This should be true; do something here with the scalar key.
  }
  if (value.Type() == YAML::NodeType::Map) {
    // This should be true; do something here with the map.
  }
}

“它是一个映射,具有单个键/值对”-。你和op可能想了些什么,来保持他的对象的顺序。谢谢,从现在起,我将更好地使用在线YAML解析器,这样我就可以了解onI更喜欢和建议的事情。