【问题标题】:specify equality between elements for find in unordered_set为 unordered_set 中的 find 指定元素之间的相等性
【发布时间】:2014-08-28 15:52:47
【问题描述】:

我有一个 Extended_Expression 类型,我在无序集中使用它,并且声明如下:

bool ExtendedExpression::operator == (const ExtendedExpression & exp) const{ ... }

但是unordered_set的find操作符好像不起作用,好像是在用另一种相等,比如内存地址。

指定要使用的相等运算符的最简单方法是什么?如果问题很明显,我是 C++ 的初学者。

【问题讨论】:

  • 这对于相等运算符来说看起来不错。可能你还没有实现好的散列函数。
  • 定义了一个 Hash() 但它是否被无序集自动使用?在公共场合:HashExpr Hash() const {return _hash;} 在受保护场合:HashEpxr _hash;

标签: c++ unordered-set


【解决方案1】:

如果您希望 unordered_set 按预期工作,您需要为您的类型专门化 std::hash。例如,请参阅此处的答案https://stackoverflow.com/a/8157967/2558027

所有新的无序容器,例如unordered_map,都是基于哈希表的,而不是像传统容器那样基于红黑树。这允许以极快、恒定的时间查找更大的数据集。

【讨论】:

    猜你喜欢
    • 2017-08-20
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多