有关std::set的问题
bacer 2002-09-19 05:19:02 如果我希望set中的元素是自己定义的一个class,需要重载< > = 等等符号
我用下面的做法,提示有错误,各位帮忙看看
class头文件
#include <string>
using namespace std;
class CClA
{
public:
string a;
int b;
string c;
bool operator==(CClA bele)
{
return (a == bele.a)&&(b==bele.b)&&(c==bele.c);
}
bool operator<(CClA bele)
{
return a < bele.a;
}
bool operator>(CClA bele)
{
return a > bele.a;
}
CClA(){}
virtual ~CClA(){}
};
main.cpp如下
#include 头文件
#include <set>
using namespace std;
int main(int argc, char* argv[])
{
set<CClA> tmap;
CClA temp;
tmap.insert(temp);
return 0;
}
编译时候提示
stl_function.h(111) : error C2678: binary '<' : no operator defined which takes a left-hand operand of type 'const class CClA' (or there is no acceptable conversion)
他的意思是没有定义'<'还是没有定义'<'左右的变量?
如果将operator<(CClA bele)改成operator<(CClA aele,CClA bele)
编译提示<太多参数
类似的问题还会出现在map中,但是如果改成vector则没有
我猜想是因为set和map在增加一个新的元素的时候要进行排序需要使用到<
但是应该在类中如何定义才可以?