如果哈希映射的值也是哈希容器,例如unordered_map<int, unordered_set<...>>,如何为该值指定自定义哈希和等于?

问题描述 投票:0回答:1

现在说我已经为 unordered_set 准备好了哈希函数和相等函数

auto equalFunc = [](...){...};
auto hashFunc  = [](...){...};

如果单独使用 unordered_set,我知道我可以执行以下操作来指定我的 DIY 哈希和等于:

std::unordered_set<std::pair<int,int>, decltype( hashFunc ), decltype( equalFunc )> mySet( 0, hashFunc, equalFunc );

但是,现在假设将 unordered_set 用作 std::unordered_map 的值,我如何指定哈希和等于?

std::unordered_map<int, std::unordered_set<std::pair<int,int>, decltype( hashFunc ), decltype( equalFunc )>> myMap( ...how? );
c++ templates
1个回答
2
投票

当您将元素插入地图时,您需要使用函数进行

std::unordered_set
构造:

myMap[some_key] = std::unordered_set<std::pair<int,int>, decltype( hashFunc ), decltype( equalFunc )>( 0, hashFunc, equalFunc );

如果您使用类型的别名,当然会更简单:

using mySetType = std::unordered_set<std::pair<int,int>, decltype( hashFunc ), decltype( equalFunc )>;

// ...

myMap[some_key] = mySetType( 0, hashFunc, equalFunc );
© www.soinside.com 2019 - 2024. All rights reserved.