Re[2]: std::unordered_map и структура с двумя полями
От: B0FEE664  
Дата: 26.02.25 19:19
Оценка: +1
Здравствуйте, Chorkov, Вы писали:

BFE>>Можно ли используя structured bindings написать шаблонную универсальную хэш-функцию для std::unordered_map при условияя, что для каждого из полей структуры есть (стандартная) хэш функция?

C>Можно.
C>Стандартной нет.
C>Есть boost::pfr::hash

C>https://www.boost.org/doc/libs/1_87_0/doc/html/reference_section_of_pfr.html#doxygen.reference_section_of_pfr.functors_8hpp

C>https://www.boost.org/doc/libs/1_87_0/doc/html/doxygen/reference_section_of_pfr/structboost_1_1pfr_1_1hash.html

Какая-то очень сложная реализация: я так и не понял как они получают tuple с ссылками на поля...

Думаю можно по-простому, написал вот такой код:
template<typename TStruct>
struct St2Hash
{
    std::size_t operator()(const TStruct& k) const
    {
        const auto& [m1, m2] = k;
        return std::hash<typename std::remove_cv<decltype(m1)>::type>()(m1) ^ (std::hash<typename std::remove_cv<decltype(m2)>::type>()(m2) << 1);
    }
};
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.