Unordered_map相等功能c ++

时间:2013-09-08 07:45:22

标签: c++ unordered-map

可能这很容易但我只是想了解我们是否可以这样做:

假设我们有一个unordered_map(string, string),所以默认情况下,如果两个字符串相等,它将检查是否相等。

现在,假设我们在相等运算符中再添加一个功能,即使两个字符串是彼此的字符串,也会返回true。为此,我们是否只能更新相等运算符而不是hasher(并使用默认的hasher)。

例如,仅定义以下函数:

bool operator() (const string& a, const string& b) const  
{  
    // check for anagram condition here  
}

2 个答案:

答案 0 :(得分:6)

Equal对象必须具有相同的哈希值,否则哈希表将在错误的桶中查找值。例如,字符串ab和ba可能最终会出现在不同的桶中,因此当您查找ab时,即使它们应该“相等”,也无法找到它。

所以不,你不能使用默认的哈希函数。

答案 1 :(得分:-1)

是的,您可以使用默认哈希函数和自定义相等运算符。使用hash std :: hash并等于自定义运算符。

template<
   class Key,
   class T,
   class Hash = std::hash<Key>,
   class KeyEqual = std::equal_to<Key>,
   class Allocator = std::allocator<std::pair<const Key, T>>
>     class unordered_map;