Вы по-прежнему считаете ключ значение с ключом hash. Но ответить на вопрос, как спросил: вы можете использовать функцию bucket()
член unordered_map
«s с ковшом итераторов:
std::unordered_map<int,int,dumbest_hash> m;
m[0] = 42;
m[1] = 43;
size_t bucket = m.bucket(1);
for(auto it = m.begin(bucket), e = m.end(bucket); it != e; ++it) {
cout << "bucket " << bucket << ": " << it->first << " -> " << it->second << '\n';
}
demo
В простых и в основном правильные точки, маркированные контейнеры подражают их упорядоченные аналоги с точки зрения интерфейса. Это означает, что если map
не позволит вам иметь дубликаты ключей, то ни один из них не будет unordered_map
.
unordered
do использовать функцию хэширования, чтобы ускорить поиск, но если два ключа имеют одинаковый хеш, они не обязательно будут иметь одинаковое значение. Чтобы поведение было похоже на упорядоченные контейнеры, unordered_set
и unordered_map
будут рассматривать только элементы, равные, если они фактически равны (с использованием operator==
или предоставленного компаратора), а не когда их хешированные значения сталкиваются.
Чтобы положить что-то в перспективе, предположим, что "eggs"
и "chicken"
имеют одинаковое значение хэша и что проверки равенства нет. Тогда следующий код будет «правильно»:
unordered_map<string, int> m;
m["eggs"] = 42;
m.insert(make_pair("chicken", 0)); // not inserted, key already exists
assert(m["chicken"] == 42);
Но если вы хотите разрешить ключи повторяющиеся в одной и той же карте, просто используйте unordered_multimap
.
На неупорядоченной карте вы не можете иметь один и тот же ключ с разными значениями, на самом деле я не задаю вопрос ... Вы спрашиваете, как проверить, является ли хэш нескольких разных ключей одинаковыми и выводится эти ведра? Тогда ответ krzaq правильный. – Banex
Я не могу принять его еще @Banex, ограничение по времени! В самом деле, я был в замешательстве, но krzap помог! Благодаря! – gsamaras