2011-03-28 63 views
1

为什么下面的程序不工作? 我该如何解决它?设置<class>插入问题

#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

请更具体 - 提及错误消息和错误位置。 – 2011-03-28 16:26:10

回答

6

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

要么添加operator <K类,或者提供第二个模板参数 - 比较器 - 到set类决定了两个K实例之间的次序。

重载operator <很简单:

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

这将意味着的K一个实例小于另一个当且仅当它的成员a不到对方的。

0

设置要求您的班级定义操作员<。例如:

class K { 
public: 

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

private: 

long a; 

};