Raf*_*fer 11 c++ dictionary unordered-map set unordered-set
双方std::set<>并std::map<>可以使用std::pair作为重点,但为什么不能std::unordered_set<>和std::unordered_map<>?
例如:
unordered_set<pair<int,int> > S;
S.insert(make_pair(0, 1));
Run Code Online (Sandbox Code Playgroud)
不编译.
Bar*_*rry 17
该unordered_*容器需要的哈希函数.默认情况下,他们使用std::hash但没有专业化std::hash的std::pair<T1,T2>标准库提供.在另一方面,有序的容器依靠std::less(默认),并std::pair 确实已operator<提供.这就是它起作用的原因.
为了拥有一个带有a的无序容器pair,你必须自己提供一个哈希算子.例如:
struct SimpleHash {
size_t operator()(const std::pair<int, int>& p) const {
return p.first ^ p.second;
}
};
std::unordered_set<std::pair<int, int>, SimpleHash> S;
S.insert(std::make_pair(0, 1));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7387 次 |
| 最近记录: |