Поиск std :: unoromended_set по значению хэша и предикату
-
29-09-2019 - |
Вопрос
Как я могу искать std :: unoromended_set знание хэш -значения и иметь какой -то предикатный объект? (Предупреждение, определяющее эквивалентность pred(x) && pred(y)
значение x == y
.)
Решение
Ну, вы можете игнорировать хеш -ценность и повторно обратить все unsorted_set
тестирование предиката. Не идеальная эффективность, так как вы предпочитаете повторить только одно ведро, но оно делает то, что вы просите.
Стандартный unordered_set
имеет интерфейс begin(size_t)
Чтобы получить итератор для конкретного ведра (по номеру) и интерфейса bucket_count()
Чтобы получить количество ведра.
Объекты с данным хэшем гарантированно, все они появляются в одном и том же ведре, поэтому итерация того, что тестирование ведра. Предикат достаточно для того, что вы хотите сделать.
Я на самом деле ничего не вижу в стандарте, чтобы гарантировать правильное ведро для итерации hash_value % bucket_count()
. Анкет Есть функция, чтобы получить ведро для данного объект, но не чтобы получить ведро для данного хеш -ценность. Анкет Попробуйте это на своей реализации: я думаю, что это разумное предположение, и я, возможно, просто не смог найти решающее ограничение в стандарте.
Таким образом, я думаю, что вы хотите что -то вроде:
size_t bucket = hash_value % myset.bucket_count();
find_if(myset.begin(bucket), myset.end(bucket), pred);
но я не уверен.