设置<class>插入问题</class>

时间:2011-03-28 16:24:16

标签: c++

为什么以下程序不起作用? 我该如何解决?

#include <iostream>
#include <set>

using namespace std;

class K {

private:
    long a;
};

int main ()
{   
    K a;
    set<K> b;

    b.insert(a);

    return 0;
}

2 个答案:

答案 0 :(得分:6)

std::set需要对元素进行排序。它要求您可以根据某些顺序比较其元素。

为您的类operator <添加K或将第二个模板参数(比较器)提供给确定两个set实例之间排序的K类。

重载operator <非常简单:

bool operator <(K const& x, K const& y) {
     return x.a < y.a;
}

这意味着当且仅当其成员K小于另一个时,a的一个实例少于另一个实例。

答案 1 :(得分:0)

set要求你的类具有运算符&lt;定义。例如:

class K {
public:

bool operator< (const K& other) const {
    return this->a < other.a;
}

private:

long a;

};