Я нашел что-то (на мой взгляд) довольно странное при чтении в файле yaml. Может быть, один из вас может объяснить мне разницу между двумя кодами.
Файл yaml, который я пытаюсь прочитать, выглядит примерно так:
map:
- [0 0 0 0]
- 0:
- 0.123
- 1:
- -0.234
- [0 0 0 1]
- 0:
- 0.00
- 1:
- 1.234
# and many more vector to int to doubles.
Теперь я пытаюсь прочитатьэто в std::map<std::vector<int>, std::map<int, double> >
для дальнейшего использования.
Я попытался сделать это, используя преобразование STL из yaml-cpp:
std::map<std::vector<int>, std::map<int, double> > the_map = node.as<std::map<std::vector<int>, std::map<int, double> > >();
Но так как это не сработало (не имеютсообщение об ошибке прямо сейчас, но это не совсем то, о чем вопрос, просто как объяснение) Я написал свою собственную процедуру чтения так:
YAML::Node node = YAML::LoadFile(name);
for(YAML::const_iterator n = node["map"].begin(); n != node["map"].end(); ++n){
auto n_0 = (*n).begin();
for(auto it = n_0->first.as<std::vector<int> >().begin(); it != n_0->first.as<std::vector<int> >().end(); ++it){
std::cout << *it << " ";
}
// Some more stuff
}
И это приводит к некоторому странному выводу:
937068720 21864 0 0
937068720 21864 0 1
Однако, если я изменю его на этот код:
YAML::Node node = YAML::LoadFile(name);
for(YAML::const_iterator n = node["map"].begin(); n != node["map"].end(); ++n){
auto n_0 = (*n).begin();
std::vector<int> vec = n_0->first.as<std::vector<int> >();
for(auto it = vec.begin(); it != vec.end(); ++it){
std::cout << *it << " ";
}
// Some more stuff
}
Все как положено:
0 0 0 0
0 0 0 1
В чем разница между этими двумя? почему я должен специально объявить вектор? Даже заключение в скобки вокруг оператора до .begin()
не имеет значения. Вот так:
for(auto it = (n_0->first.as<std::vector<int> >()).begin(); it != (n_0->first.as<std::vector<int> >()).end(); ++it)
Может кто-нибудь объяснить это мне? В чем разница между первым и вторым кодом?
И так как я новичок в YAML, я рад любым предложениям по улучшению чтения такого файла, однако это не моя главная забота.