首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么关于使用 std:sort 对容器存储的指针进行排序

2013-05-02 
如何关于使用 std::sort 对容器存储的指针进行排序如何关于使用 std::sort 对容器存储的指针进行排序struc

如何关于使用 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 里面的比较是两个指针的比较,不是指针所指的对象的比较,有什么
办法可以按对象比较呢
[解决办法]
对比指针指向的东西就好了

我记得std::sort好像可以设定对比条件,具体的忘了
[解决办法]
看下这个吧
http://dev.firnow.com/course/3_program/c++/cppjs/20090825/172194.html

[解决办法]
 sort(ctn.begin(), ctn.end(),less<_row>())   ; 

 sort(ctn.begin(), ctn.end(), greater<_row>())   ; 
[解决办法]
bool myfunction (_row* i,_row* j) { return (*i<*j); }

std::sort(r.begin(),r.end(),myfunction);
[解决办法]
自己写个比较函数,作为sort的第三个参数。。

热点排行