В моем приложении у меня есть следующие требования:
Структура данных будет заполнена только один раз некоторыми значениями (не парами ключ/значение). Значения могут повторяться, но я хочу, чтобы структура данных сохраняла их только один раз.
Я буду повторять сотни раз все элементы структуры данных, созданной выше. Порядок, в котором элементы появляются в итерации, не имеет значения.
Ограничение 1 предполагает, что мне придется либо использовать set, либо unordered_set, поскольку данные не представлены в виде пар ключ-значение.
Теперь вставка набора обходится дороже, чем вставка unordered_set, но структура данных заполняется только один раз в начале моей программы.
Я считаю, что решающим фактором будет то, насколько быстро я смогу перебирать все элементы структуры данных. Я не уверен, будет ли set или unordered_set быстрее для этой цели. Я считаю, что стандарт не упоминает об этом факте, поскольку эта операция будет O (n) для любой структуры данных. Но мне интересно, для какой структуры данных iterator.next() будет быстрее.
set
, а затем скопируйте/переместите все вvector
для быстрой итерации. Таким образом, возникает вопрос: нужно ли вам что-нибудь еще, кроме итерации после того, как она заморожена? (например, быстрый поиск) - person Matthieu M.   schedule 01.07.2014std::lower_bound
:-S - person Kerrek SB   schedule 01.07.2014std::less<T*>
... - person Kerrek SB   schedule 01.07.2014unordered_set
при поиске (в зависимости от количества элементов), потому что для этого требуется загрузить log (N) строк кэша, тогда как хэш-таблица загружает фиксированное количество строк кэша (для заданной нагрузки фактор). - person Matthieu M.   schedule 01.07.2014