![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Equality Predicates and Hash FunctionsBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 41. Boost.Unordered
|
![]() | Caution |
---|---|
Будьте осторожны при использовании оператора равенства< |
Аналогично, пользовательская хеш-функция может использоваться для пользовательских типов:
struct point { int x; int y; }; bool operator==(point const& p1, point const& p2) { return p1.x == p2.x && p1.y == p2.y; } struct point_hash : std::unary_function<point, std::size_t> { std::size_t operator()(point const& p) const { std::size_t seed = 0; boost::hash_combine(seed, p.x); boost::hash_combine(seed, p.y); return seed; } }; boost::unordered_multiset<point, point_hash> points;
Поскольку хеш-функция по умолчаниюBoost.Hash, мы можемрасширить ее для поддержки типа, чтобы хеш-функция не нуждалась в явном задании:
struct point { int x; int y; }; bool operator==(point const& p1, point const& p2) { return p1.x == p2.x && p1.y == p2.y; } std::size_t hash_value(point const& p) { std::size_t seed = 0; boost::hash_combine(seed, p.x); boost::hash_combine(seed, p.y); return seed; } // Now the default function objects work. boost::unordered_multiset<point> points;
Посмотреть. Хеш документациядля более подробной информации о том, как это сделать. Помните, что он опирается на расширения к проекту стандарта — поэтому он не будет работать для других реализаций неупорядоченных ассоциативных контейнеров, вам нужно будет явно использовать Boost. Хэш.
Table 41.3. Methods for accessing the hash and equality functions.
метод |
Описание |
---|---|
< | Возвращает хеш-функцию контейнера. |
< | Возвращает ключевую функцию равенства контейнера. |
Статья Equality Predicates and Hash Functions раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 41. Boost.Unordered может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 41. Boost.Unordered ::
реклама |