|  | 
|      | 
|  | 
| Equality Predicates and Hash FunctionsBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 41. Boost.Unordered
  
   | |||||||||||||||
| ![[Caution]](/img/caution.png) | 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 ::
| реклама |