首页 > 解决方案 > c ++ set with structs, set.find() 函数产生错误'无效比较器'

问题描述

我制作了一组结构。我的结构有一个长度为 8 的数组作为指针。如果我在集合中插入一些结构,那没关系。但是当我尝试查找时,会发生错误('无效比较器')。这是我的代码。

struct Key {
    int* arr;
};

bool operator<(const Key& a, const Key& b) {
    for (int i = 0; i < 8; i++) {
        if (a.arr[i] == b.arr[i]) {
            continue;
        }
        else {
            return a.arr[i] < b.arr[i];
        }
    }

    return true;
}

bool operator==(const Key& a, const Key& b) {
    for (int i = 0; i < 8; i++) {
        if (a.arr[i] != b.arr[i]) {
            return false;
        }
    }

    return true;
}


    set<Key> visit;
    visit.insert(initKey);

......

                Key key;
                key.arr = newcandidate;

                visit.find(key); -> trigger error.

我想将数组添加到某处。然后我想在那里快速找到一些数组。所以我尝试使用“设置”结构。我需要做什么来解决这个问题?非常感谢您的阅读。

标签: c++

解决方案


您只需要正确定义 operator<。operator== 与集合无关。您应该在最后一行返回 false。关系很严密。不可能有 a < b 和 b < a,但是您的运算符被定义为 a < a。


推荐阅读