Для ваших объемов данных это, очевидно, не имеет значения с точки зрения производительности, но multi_map
, скорее всего, позволит вам писать более короткий, понятный и удобный код. Что касается общей производительности векторных карт (что полезно знать, но, скорее всего, становится актуальным только для миллионов элементов данных или требований с низкой задержкой) ...
vector
не производит автоматическую сортировку для вас, поэтому вы 'd возможно, push_back
кавычки, когда вы их читаете, затем сделайте один std::sort
после загрузки данных, после чего вы можете быстро найти элементы с помощью std::binary_search
или std::lower_bound
или определить позиции вставки для новых котировок, используя, например, std::lower_bound
, но если вы хотите вставить новую цитату после этого, вам нужно переместить существующие векторные элементы из этой позиции, чтобы освободить место - это относительно медленно. Поскольку вы просто делаете несколько ad-hoc-вставок на основе пользовательского ввода, время для этого всего лишь с несколькими сотнями котировок в векторе будет совершенно несущественным. В целях изучения программирования, однако, хорошо понимать, что multimap
устроен как разновидность ветвящегося двоичного дерева с указателями, связывающими элементы данных, что позволяет относительно быстро вводить (и удалять). Для некоторых приложений, следующих за всеми этими указателями, может быть более дорого (т.медленнее), чем смежная память вектора (что лучше работает с кэш-памятью процессора), но в вашем случае элементы данных представляют собой все строки и векторы строк, которые, вероятно, (если не будут задействованы короткие оптимизаторы строк), требуют переполнения всей памяти в любом случае.
В общем, если автор, естественно, является ключом для ваших данных, просто используйте multi_map
... он сделает все ваши операции в разумные сроки, возможно, не самый быстрый, но не особенно медленный, в отличие от вектора для пост-данных- вставки в середине контейнера (/ удаления).
Попробуйте оба, бенчмарк. –
Будут ли все данные считаться сразу? Я имею в виду, например, только в начале приложения? Или данные могут быть добавлены во время выполнения? –
@KirilKirov Я отформатировал данные для чтения из файла в начале приложения, но есть также команда ввода, которую пользователь может использовать во время ее выполнения. – QwertyQuill