/***********请问怎样对进行排序呢?************/

demo001 2004-08-19 09:39:44
小弟初学STL

请教一下诸位

在对vector或者list操作时,容易用sort进行排序

但是对map的话由于它的元素是pair,似乎有些不好办

假设pair(string,MyClass)
MyClass是我自己定义的

1.那么怎么样按照string排序?

2.怎么样使用我定义的一个函数像vector那样用count_if find_if对符合条件的MyClass进行筛选啊?

3.当vector装入自定义对象之后怎么样使用sort呢?是重载自定义对象的'>' '<'运算符吗?

谢谢诸位
...全文
342 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pacman2000 2004-08-19
  • 打赏
  • 举报
回复
2. 传给find_if, count_if的函数,其实操作的参数是*(map::iterator),也就是pair(string,MyClass)。函数里写如何对arg.second进行等于判断。
pacman2000 2004-08-19
  • 打赏
  • 举报
回复
3. 重载operator<,或者给sort传进个cmp()参数。
qwertasdfg123 2004-08-19
  • 打赏
  • 举报
回复
map是一种平衡二叉树。根据元素的键值自动排序的。
demo001 2004-08-19
  • 打赏
  • 举报
回复
那第二个第三个问题呢?
Mephisto_76 2004-08-19
  • 打赏
  • 举报
回复
map 是不需要排序的,因为map在添加一个元素时会自动排序,象你的例子,插入时它就是按string排序的。vector自身并没有排序功能,它只能调用stl的sort函数对自身元素排序,一个是默认的排序,另一个是根据你指定的排序规则进行排序。list有自己的sort函数,它的效率较stl中的sotr函数为高,它也有两种方式,跟stl的sort一样。

你同样可以使用stl中的函数对map进行操作,不过很多时候用容器自身的方法,效率要好一点。
xkak2 2004-08-19
  • 打赏
  • 举报
回复
map无法排序。
demo001 2004-08-19
  • 打赏
  • 举报
回复
map果然是自动排序的:)

谢谢
demo001 2004-08-19
  • 打赏
  • 举报
回复
我在把第一个例子研究一下

稍后结帖
demo001 2004-08-19
  • 打赏
  • 举报
回复
谢谢楼上的

原来,pair也可以做参数传入传出^_^,按照你的例子我已经可以实现了,

不过我的要求很简单,没有用到你那么多技巧,

以后要用到你那些高深的技巧的时候再向您请教:)

不过我觉得你的那个&p用引用传似乎有点多余哦,可能是对于我的应用多余吧

pacman2000 2004-08-19
  • 打赏
  • 举报
回复
比如说,传进一个cmp()函数,
bool cmp(pair<string,MyClass> &p)
{
MyClass myclass("hehe");
return (p.second==myclass);
}

这里的例子假设myclass可以从字符串构造,并且有operator=
如果这个判断的值要传参数的话,那就要用bind2nd()了!
demo001 2004-08-19
  • 打赏
  • 举报
回复
up
demo001 2004-08-19
  • 打赏
  • 举报
回复
liuguanjie@sina.com
demo001 2004-08-19
  • 打赏
  • 举报
回复
嗯,第三个问题搞定,谢谢楼上的:)

第二个问题您回答的我还有点不明白

"函数里写如何对arg.second进行等于判断"

那函数的入口参数怎么写啊? 难道写成pair?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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