在排序用户定义对象的向量时,我遇到了一个问题。我正在使用stl定义的排序算法并将其传递给我的函数对象,但它拒绝编译,请你帮我解决。
感谢。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
template<typename T>
class MyType
{
public:
T t1;
public:
MyType()
{
}
MyType(const MyType& mt)
{
t1 = mt.t1;
}
MyType& operator=(const MyType& mt)
{
this->t1 = mt.t1;
return *this;
}
bool operator<(const MyType& mt)
{
if(this->t1 < mt.t1)
return true;
else
return false;
}
bool operator==(const MyType& mt)
{
if(this->t1 == mt.t1)
return true;
else
return false;
}
MyType(T t)
{
t1 = t;
}
};
template<class T>
class cmp_greater
{
public:
bool operator()(const T& a, const T& b)
{
return !(a < b);
}
};
int main()
{
MyType<int> m1(1);
MyType<int> m2(2);
MyType<int> m3(3);
vector<MyType<int> > vmt;
vmt.push_back(m1);
vmt.push_back(m2);
vmt.push_back(m3);
vector<MyType<int> >::iterator pos;
for(pos = vmt.begin(); pos != vmt.end(); pos++)
{
cout<<pos->t1<<endl;
}
sort(vmt.begin(), vmt.end(), cmp_greater<MyType<int> >() );
cout<<"After sorting in decending order."<<endl;
for(pos = vmt.begin(); pos != vmt.end(); pos++)
{
cout<<pos->t1<<endl;
}
vmt.erase(vmt.begin()+1);
cout<<"after erase"<<endl;
for(pos = vmt.begin(); pos != vmt.end(); pos++)
{
cout<<pos->t1<<endl;
}
//insert can also be used in vectors;
}
答案 0 :(得分:2)
bool operator<(const MyType& mt)
应该声明为const
,如
bool operator<(const MyType& mt) const
否则,bool cmp_greater::operator()(const T& a, const T& b)
无法调用重载的less-than运算符。