#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class Cc
{
public:
Cc(const Cc& c)
{
m_str=c.m_str;
}
Cc(string str)
{
m_str=str;
}
const string get() const
{
return m_str;
}
void show() const
{
cout<<m_str;
}
const Cc operator+(const string& str)
{
return Cc(m_str+str);
}
bool operator<(const Cc& c)
{
return m_str<c.m_str;
}
private:
string m_str;
};
int main()
{
Cc a("1");
Cc b("4");
Cc c("3");
Cc d("2");
vector<Cc*> vec1;
vec1.push_back(&a);
vec1.push_back(&b);
vec1.push_back(&c);
vec1.push_back(&d);
vector<Cc*>::iterator itb=vec1.begin(),ite=vec1.end();
for(int i=0;i<4;i++)
{
vec1[i]->show();
}
sort(itb, ite);
for(int i=0;i<4;i++)
{
vec1[i]->show();
}
return 0;
}
如果用sort(begin ,end )的话得不到想要结果, 查询MSDN知道sort有第三参数(Pred pr )算子,用来对于指针类型的容器进行修正;
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class Cc
{
public:
Cc(const Cc& c)
{
m_str=c.m_str;
}
Cc(string str)
{
m_str=str;
}
const string get() const
{
return m_str;
}
void show() const
{
cout<<m_str;
}
const Cc operator+(const string& str)
{
return Cc(m_str+str);
}
bool operator<(const Cc& c)
{
return m_str<c.m_str;
}
private:
string m_str;
};
bool Great(const Cc*a, const Cc*b)
{
return a->get()<b->get();
}
int main()
{
Cc a("1");
Cc b("4");
Cc c("3");
Cc d("2");
vector<Cc*> vec1;
vec1.push_back(&a);
vec1.push_back(&b);
vec1.push_back(&c);
vec1.push_back(&d);
vector<Cc*>::iterator itb=vec1.begin(),ite=vec1.end();
for(int i=0;i<4;i++)
{
vec1[i]->show();
}
sort(itb, ite,Great);
for(int i=0;i<4;i++)
{
vec1[i]->show();
}
return 0;
}
算子需要用到私有成员, 要么给接口,要么定义友元函数,不赘述。
这样就可以得到想要的结果了
(如果我改原来的函数小于的重载改成指针会有什么情况)
也同样得不到结果, 所以一定要给一个算子