«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как реализовать универсальную хэш -функцию для кортежей в неупорядоченных коллекциях?

Как реализовать универсальную хэш -функцию для кортежей в неупорядоченных коллекциях?

Опубликовано в 2025-03-26
Просматривать:328

How to Implement a Generic Hash Function for Tuples in Unordered Collections?

generic hash function для кортежей в неупорядоченных коллекциях

. Чтобы исправить это, один подход - это вручную определить функцию HASH для конкретного типа корзины, такой как:

шаблон шаблон struct std :: hash > { size_t operator () (std :: tuple const & tuple) const {...} };
template
struct std::hash<:tuple int>> {
  size_t operator()(std::tuple const& tuple) const { ... }
};
. Хотя этот подход работает, он может быть утомительным определять хэш -функции для каждого используемого типа кортежа. Чтобы автоматизировать это, общая хэш -функция может быть реализована следующим образом:

#включить имена пространства std { пространство имен { // код, полученный из Boost Шаблон inline void hash_combine (std :: size_t & seed, t const & v) {...} // код рекурсивного шаблона от Matthieu M. Шаблон :: value - 1> struct hashvalueimpl {...}; } Шаблон struct hash > { size_t operator () (std :: tuple const & tuple) const {...} }; }
template
struct std::hash<:tuple int>> {
  size_t operator()(std::tuple const& tuple) const { ... }
};
Эта функция использует, зависящий от аргумента, имени имени (ADL), чтобы позволить компилятору автоматически выбирать правильную реализацию хэш на основе типа Tuple.

стандартное согласованное решение

это стоит отметить, что непревзойденные функции в STDININEPACE. Для соответствия стандартам решение может быть создано и используется пользовательское пространство имен и используется для определения хэш-функции:

пространство имен MY_HASH { // Пыряйте типы не тупе в std :: hash Шаблон struct hash {...}; // Предоставьте оптимизированный хэш для кортежей Шаблон struct hash > {...}; }
template
struct std::hash<:tuple int>> {
  size_t operator()(std::tuple const& tuple) const { ... }
};
при использовании этого решения неупорядоченная коллекция должна явно ссылаться на пользовательскую хеш -реализацию следующим образом:

unoromeded_set , std :: hash >, std :: eval_to > > тест;
]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3