但 std::unordered_map 无法与 std::pair 一同使用, 因为 pair 没有默认构造函数
解决方法:自定义hash构造模板函数
/***
* @description:
* @brief PairHash 模板函数, 用于构造 unordered_map 中 std::pair<u64, u64>
* @Date: 2023-04-10 21:31:16
* @return {*}
*/
struct PairHash {
template <class T1, class T2>
std::size_t operator() (const std::pair<T1, T2>& p) const {
auto h1 = std::hash<T1>{}(p.first);
auto h2 = std::hash<T2>{}(p.second);
return h1 ^ h2;
}
};
/***
* @description:
* @brief PairHash 模板函数, 用于构造 unordered_map 中 std::pair<u64, u64>
* @Date: 2023-04-10 21:31:51
* @return {*}
*/
struct PairEqual {
template <class T1, class T2>
bool operator() (const std::pair<T1, T2>& lhs, const std::pair<T1, T2>& rhs) const {
return lhs.first == rhs.first && lhs.second == rhs.second;
}
};
std::unordered_map<std::pair<u64, u64>,u64,PairHash,PairEqual> edge_map_;
edge_map_[make_pair(u,v)] = x;
注意这里 定义std::unordered_map<std::pair<u64, u64>,u64,PairHash,PairEqual> edge_map_;
时,
std::pair<u64, u64>
是 key
u64
是value