如何比较STL数据结构中的对象

How to compare objects in STL data structure

(这个问题属于 java) 我试着四处寻找这个……得到了一些部分答案,但没有什么能真正帮助我。 如果我有一个 class 对,其中有 2 个变量,并将其插入到 HashSet 或 TreeSet 中,插入后我将如何访问这些元素。 例如:

HashSet<Integer>hs=new HashSet<>();
hs.add(new pair(1,2));
hs.get(new pair(1,2));

所以在这里它会抛出一个空指针异常,因为它正在获取一个单独的地址。我如何修改数据结构以具有某种比较器,我们可以比较内部的实际元素,例如:a==other.a && b==other.b

您只需为您的对 class 覆盖 equals 和 hashCode 方法。例如:

class Pair {
    int a;
    int b;

    Pair(int a, int b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public boolean equals(other: Object) {
        if (other == null) { return false; }
        if (other instanceof Pair) {
            Pair otherPair = (Pair)other;
            return a == otherPair.a && b == otherPair.b;
        }
        return false;
    }

    @Override
    public int hashCode() {
        return a * 31 + b;
    }
}

要了解更多信息,请阅读 java.lang.Object 中的 equals 和 hashCode 方法,并阅读 HashSet 文档。