滑蒻稽的博客

【其他】pair 存入 gp_hash_table 的问题

std::tr1::hash 并没有给 pair 定义哈希策略,所以你得特化模板自己写一个:

template <>
struct tr1::hash<pair<int, int>> {
  size_t operator()(pair<int, int> x) const {
    return x.fi ^ x.se;
  }
};

理论上返回什么都是对的,尽量选择冲突小的方式就行。

同理,__int128 的哈希你甚至可以这么写:

template <>
struct tr1::hash<__int128> {
  size_t operator()(__int128 x) const {
    return x;
  }
};

但是捏对于 std::unordered_map 不能这么写,大概是因为不允许你特化标准库的模板。然后就得写个这种玩意:

struct pairhash {
  size_t operator()(dhash x) const {
    return x.first ^ x.second;
  }
};
unordered_map<dhash, int, pairhash> pp;
posted @ 2022-03-28 11:43  huaruoji  阅读(321)  评论(0编辑  收藏  举报