map 排序的问题,如何根据value值对map排序?

cmoth 2005-06-15 05:23:03
有一个map<int,string>,其中value值是型如"12 4 45 778 667"的五节字符串,现在我想根据第三节的值对这个map进行排序?该怎么办?我考虑过用sort,但不知道比较函数的参数怎么写,如下形式编译不过去:
bool comp(map<string,string>::value_type p1 , map<string,string>::value_type p2)
{
......
}

map<string,string> m;
.....
sort(m.begin(),m.end(),comp);
...全文
1101 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmoth 2005-06-15
  • 打赏
  • 举报
回复
那map里面的value_comp和value_compare是做什么用的?
jixingzhong 2005-06-15
  • 打赏
  • 举报
回复
MARK   TOO!!


foochow 2005-06-15
  • 打赏
  • 举报
回复
mark!!!
zhousqy 2005-06-15
  • 打赏
  • 举报
回复
对map排序好像是没有意义的。
lw1a2 2005-06-15
  • 打赏
  • 举报
回复
只能按Key进行排序:

#include <map>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

class CLess
{
public:
bool operator()(const string& lhs,const string& rhs)
{
if (条件) return true;//自己写这条件
else return false;
}
};

int main()
{
map<string,string,CLess> m;
typedef map<string,string,CLess>::value_type valType;
m.insert(valType(string("12 4 46 778 667"),string("1")));
m.insert(valType(string("12 4 45 778 667"),string("2")));
map<string,string>::iterator it=m.begin();
while(it!=m.end())
{
cout<<(*it).first<<"|"<<(*it).second<<endl;
++it;
}
system("pause");
}
newbiestar 2005-06-15
  • 打赏
  • 举报
回复
回复人: darkstar21cn(爱上小猫的小狗)(读不懂爱情所以来读程序) ( ) 信誉:99 2005-06-15 17:43:00 得分: 0


map是对key排序的,不是对map_type。
map<string,string> 这个要按你的要求排序,那么你得把string类的operator<()重载掉。


============================================
std::string的operator<已经重载过了……只能继承std::string以后用重写了……

其实如果vector模拟map的话也是可以的……只不过比较辛苦一点,要写得东西多一点……
darkstar21cn 2005-06-15
  • 打赏
  • 举报
回复
map是对key排序的,不是对map_type。
map<string,string> 这个要按你的要求排序,那么你得把string类的operator<()重载掉。
newbiestar 2005-06-15
  • 打赏
  • 举报
回复
map不是给你排序的东西……map本来就排序好了……

64,660

社区成员

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

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