Digamos que agora tenho funções hash e equal prontas para um unordered_set
auto equalFunc = [](...){...};
auto hashFunc = [](...){...};
Se o unordered_set for usado exclusivamente, sei que posso fazer o seguinte para especificar meu hash DIY e equal:
std::unordered_set<std::pair<int,int>, decltype( hashFunc ), decltype( equalFunc )> mySet( 0, hashFunc, equalFunc );
Entretanto, agora suponha que o unordered_set deve ser usado como valor de std::unordered_map, como posso especificar o hash e o equal?
std::unordered_map<int, std::unordered_set<std::pair<int,int>, decltype( hashFunc ), decltype( equalFunc )>> myMap( ...how? );
Você precisa fazer a
std::unordered_set
construção, com as funções, quando inserir um elemento no mapa:Claro que seria mais simples se você usasse um alias para o tipo:
Lambdas são legais, mas não neste contexto. Eu definiria uma classe para funções hash e equal.
Usar aliases do tipo casal torna isso muito mais prático.
https://godbolt.org/z/zxqsb3s4b