Я очень смущен именем "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
и перезаписать проверку с равными значениями.)
Или опять по-другому: когда я повторяю их, могу ли я предположить, что список ключей упорядочен по их хэш-значению?