无序映射相等功能c ++

Jac*_*row 4 c++ unordered-map

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

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

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

例如,仅定义仿函数:

bool operator() (const string& a, const string& b) const  
{  
    // check for anagram condition here  
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*oni 6

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

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

  • 你应该使用一些与排列不变的哈希函数,例如字符串的单个`char`-s的总和. (2认同)