Предположим, что sizeof(void*) == sizeof(size_t)
и что хэширование указателя просто отливает его в size_t
. Поэтому я хочу знать, содержит ли мой набор элемент, который будет быстрее std::set<void*>
или std::unordered_set<void*>
?Для операции count(). Что быстрее std :: set <void*> или std :: unordered_set <void*>?
Я знаю, как работает std::set
, но я не знаком с std::unordered_set
. Ну, я знаю, что неупорядоченный набор использует хеширование и ведра и что, если пересечение не происходит (это мой случай), сложность O (1). Но я не знаю, насколько это постоянная сложность.
Если количество дней в контейнере имеет значение, в моем фактическом сценарии используется менее ста¹. Но мое любопытство касается обоих случаев с несколькими элементами и множеством элементов.
¹ Количество элементов настолько мало, что даже std::vector
будет выполнять штраф.
Хэш-таблицы, как правило, используют больше памяти для обеспечения доступа за меньшее время. –
http://stackoverflow.com/questions/1349734/why-on-earth-would-anyone-use-set-instead-of-unordered-set –
Почему бы вам просто не сравнить сложность интересующих вас операций и решите в соответствии с этим? См. ['Unordered_set'] (http://en.cppreference.com/w/cpp/container/unordered_set), [' set'] (http://en.cppreference.com/w/cpp/container/set) , и, возможно, также ['vector'] (http://en.cppreference.com/w/cpp/container/vector). – syam