如何关于使用 std::sort 对容器存储的指针进行排序
如何关于使用 std::sort 对容器存储的指针进行排序
struct _row
{
std::string m_name;
int m_age;
std::string m_sex;
bool operator< (const _row &r) const
{
return m_name.compare(r.m_name) >= 0?true:false;
}
bool operator< (const _row *r) const
{
return m_name.compare(r->m_name) >= 0?true:false;
}
};
void test_sort_by_point()
{
std::vector<_row *> r;
_row *r1 = new _row();
r1->m_age = 2;
r1->m_name = "aaaa";
r1->m_sex = "男";
r.push_back(r1);
r1 = new _row();
r1->m_age = 4;
r1->m_name = "dddd";
r1->m_sex = "男";
r.push_back(r1);
r1 = new _row();
r1->m_age = 1;
r1->m_name = "bbbb";
r1->m_sex = "男";
r.push_back(r1);
_row *r2 = new _row();
r2->m_age = 9;
r2->m_name = "cccc";
r2->m_sex = "男";
r.push_back(r2);
std::vector<_row *>::iterator it;
for(it=r.begin();it != r.end();++it)
{
std::cout<<(*it)->m_name<<" ";
}
std::cout<<endl;
//r.sort(std::less<_row*>());
std::sort(r.begin(),r.end());
for(it=r.begin();it != r.end();++it)
{
//_row * t = *it;
std::cout<<(*it)->m_name<<" ";
}
std::cout<<endl;
}
int main(int argc,char *argv[])
{
test_sort_by_point();
system("pause");
}
现在输出的结果是:
aaaa dddd bbbb cccc
aaaa dddd bbbb cccc
我希望得到的结果是:
aaaa dddd bbbb cccc
dddd cccc bbbb aaaaa
或者:
aaaa dddd bbbb cccc
aaaa bbbb cccc dddd
如果 std::vector<_row *> r,这个声明成 std::vector<_row> r;
就能很好的排序,达到我要的目的,按 _row 里面 m_name 排序,但是现在
r 里面存储的是指针,不能重载 bool operator<(const _row *,const _row *),
所以默认sort 里面的比较是两个指针的比较,不是指针所指的对象的比较,有什么
办法可以按对象比较呢