一个STL排序的问题

dqdx_zch 2009-04-20 11:12:13
bool manage::UDgreater(person *mm1, person *mm2)
{
return (mm1->getmath()) > (mm2->getmath());
}


void manage::sortplist()
{
sort(plist.begin(), plist.end(), UDgreater);
}

我想在主函数中用一个manage类型的函数调用sortlist(),对plist的math键值进行排序
plist为一个vector类型的
这样写怎么不行啊?
他说sort要有两个参数,而我的是三个参数。
也许我描述的不怎么好,但是程序实在太大了,
我的qq号是252402705,如果想讨论下,加我啊!
各位高手,急啊!
...全文
112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dqdx_zch 2009-04-22
  • 打赏
  • 举报
回复
我把UDgreater写为全局函数,就可以了
  • 打赏
  • 举报
回复
bool manage::UDgreater(person *mm1, person *mm2)
{
return (mm1->getmath()) > (mm2->getmath());
}


void manage::sortplist()
{
sort(plist.begin(), plist.end(), UDgreater);
}


这样写,UDgreater作为泛型sort回调函数,没有问题啊。关键是你用来比较的person类里的数据是怎样的?

return (mm1->getmath()) > (mm2->getmath());这个规则,就这里看来没有问题啊。

你贴代码看看。
old-six-programmer 2009-04-20
  • 打赏
  • 举报
回复
对于类的成员函数,需要祭出mem_fun和mem_fun_ref武器

sort(plist.begin(), plist.end(), mem_fun(&manage::UDgreater) );


或者,启用函数对象

struct UDgreater
{
bool operator() (person *mm1, person *mm2)
{
return (mm1->getmath()) > (mm2->getmath());
}
};

...

void manage::sortplist()
{
sort(plist.begin(), plist.end(), UDgreater);
}

lijinfenghust 2009-04-20
  • 打赏
  • 举报
回复
一种方法用全局函数

bool managerUDgreater(person *mm1, person *mm2)
{
return (mm1->getmath()) > (mm2->getmath());
}



一种方法用 仿函数

struct managerCompare
{
bool operator()(person *mm1, person *mm2)
{
return (mm1->getmath()) > (mm2->getmath());

}
}

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧