В каком порядке yaml-cpp возвращает данные? - PullRequest
0 голосов
/ 09 мая 2019

Я написал следующий файл 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 Ответ

3 голосов
/ 09 мая 2019

YAML-картам не разрешено иметь дубликаты ключей , поэтому файл YAML фактически недопустим. yaml-cpp просто снисходителен и не сообщает об ошибке.

Более того, в картах YAML не указан порядок ключей , и поэтому yaml-cpp просто выбирает тот порядок, который наиболее удобен для внутренней перебора. Вероятно, лучше предположить, что неопределенный ордер означает случайный ордер, т. Е. На него нельзя положиться.

...