Поиск std :: unoromended_set по значению хэша и предикату

StackOverflow https://stackoverflow.com/questions/3923373

Вопрос

Как я могу искать 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);

но я не уверен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top