2013-07-31 3 views
0

Просто быстрый вопрос о внутренней работе yaml-cpp.Внутренние разработки карт yaml-cpp vs C++

я заметил, что, когда я попытался посмотреть ключ, который не существует я получил сообщение об ошибке, таких как:

yaml-cpp: error at line 0, column 0: bad conversion 

Я был удивлен этим, потому что я принял бы на этот момент после загрузки мы работал бы непосредственно с на карте памяти

Если я действительно поиск, например

string foo = myyaml["bar"]["foo"].as<string>(); 

ли это произойдет так же эффективно, как если бы я был сильно типизированной карта. Было бы более эффективным, если бы я предварительно обрабатывал вещи, которые, как я знаю, существовал в yaml в карте C++ и обращался к ним напрямую, а не через узел?

Я предполагаю, что я спрашиваю, если перфорация на карте быстрее, чем acessing Узла

Thanks

ответ

1

Lookup в карте в YAML-CPP является O(n) - это перебирает все записи в карте , См. this issue на странице проекта.

Поиск в std::map - O(log n) - он хранит ключи в порядке, а бинарные поиски - для поиска вашего ключа. Поэтому, если у вас есть большое количество ключей, возможно, вам будет быстрее обрабатывать ваши данные. Но вы должны, вероятно, сначала измерить :)

+0

Спасибо. Я реализовал как прямой поиск по yaml-cpp, так и к C++-картам, несущим одни и те же данные без каких-либо других изменений кода. (Я простую предварительную обработку бит, мне нужно много искать на 3 других картах). В среднем это на 43% меньше, чем в среднем. Кстати, это очень хорошая и простая в использовании библиотека. :) – easytiger

Смежные вопросы