我对“unordered_map”这个名字感到非常困惑。顾名思义,键根本没有排序。但我一直认为它们是按哈希值排序的。还是那是错误的(因为名称暗示它们没有被订购)?
或者换一种说法:这是
typedef map<K, V, HashComp<K> > HashMap;
和
template<typename T>
struct HashComp {
bool operator<(const T& v1, const T& v2) const {
return hash<T>()(v1) < hash<T>()(v2);
}
};
一样
typedef unordered_map<K, V> HashMap;
? (好吧,不完全是,STL 会在这里抱怨,因为可能有键 k1,k2 并且既不是 k1 < k2 也不是 k2 < k1。您需要使用multimap
并覆盖相等检查。)
或者再次不同:当我遍历它们时,我可以假设键列表是按它们的哈希值排序的吗?