Могу ли я переименовать узел в yaml-cpp?

Предположим, что у меня есть запись YAML, например foo: bar. Могу ли я использовать yaml-cpp для переименования ключа foo в buz без необходимости копировать все содержимое? Другими словами, я знаю, что могу сделать это:

YAML::Node node = YAML::Load("foo:bar");
YAML::Node new_node;
new_node["buz"] = node["foo"];

Однако это кажется расточительным, и мне интересно, есть ли встроенная возможность просто переименовать ключ foo?


person space_voyager    schedule 09.07.2020    source источник


Ответы (1)


Ну, вы можете сделать что-то вроде

YAML::Node node = YAML::Load("foo: bar");
for (auto it = node.begin(); it != node.end(); ++it) {
  if (it->first.as<std::string>() == "foo") {
    it->first = "buz";
    break;
  }
}

Насколько я знаю, yaml-cpp хранит свои элементы сопоставления в виде списка пар, поэтому поиск в любом случае будет выполнять подобный цикл.

person flyx    schedule 09.07.2020