В §23.2.7 Неупорядоченные ассоциативные контейнеры [unord.req] стандарта C ++ таблица 91 описывает дополнительные требования, которым должен соответствовать неупорядоченный ассоциативный контейнер STL. В этой таблице стандарт диктует, что STL неупорядоченные контейнеры (т.е. unordered_set
, unordered_map
, unordered_multiset
а также unordered_multimap
) должны предоставить в качестве типов членов local_iterator
а также const_local_iterator
,
local_iterator
тип итератора, чья категория, значение, разница, указатель иiterator
, Этот итератор может использоваться для перебора одного сегмента, но не между сегментами.const_local_iterator
является типом итератора, у которого типы категорий, значений, разностей, указателей и ссылок совпадают с типами неупорядоченного контейнера const_iterator
, Этот итератор может использоваться для перебора одного сегмента, но не между сегментами.Каковы некоторые применения этих итераторов?
Главное, для чего я вижу, это проверить, сколько у вас коллизий. С помощью bucket
Вы можете получить, в каком контейнере хранится ключ. Затем вы можете передать это значение в begin
который вернет local_iterator
к предметам в этом ведре. Теперь вы можете выполнить итерацию этого сегмента и посмотреть, сталкиваетесь ли вы с какими-либо другими элементами, и если вы, то каковы эти элементы. Это, в свою очередь, позволяет настроить функцию хеширования.
Других решений пока нет …