能否不让map排序

zzutnicholas 2009-08-26 11:11:31
map<string,double> obj

我发现obj的key按照字母排序了

因为我希望每个keypair按照加入的时候顺序迭代处理

不知道改怎么做?

谢谢


...全文
516 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dskit 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zzutnicholas 的回复:]
引用 8 楼 dskit 的回复:
unsorted_map
boost



原数据:
FACING_1 246.069859
ROUGH_BORE_ID 631.877831
GROOVE_FACE 3.910494
FINISH_TURN_OD 9.119089
FINISH_TURN_OD_2 8.978312
FINISH_TURN_OD_1 8.665136
FINISH_TURN_OD_3 9.242448
ROUGH_BORE_ID_1 81.913576
GROOVE_ID 48.332078
GROOVE_ID_1 53.805978
FINISH_BORE_ID 1.666675


迭代输出数据:
FINISH_TURN_OD_3
FINISH_TURN_OD
ROUGH_BORE_ID_1
FINISH_TURN_OD_1
FACING_1
GROOVE_FACE
GROOVE_ID
FINISH_TURN_OD_2
FINISH_BORE_ID
GROOVE_ID_1
ROUGH_BORE_ID

[/Quote]
explicit unordered_map(size_type n = 3,
const hasher& hf = hasher(),
const key_equal& eql = key_equal(),
const allocator_type& a = allocator_type());
template <class InputIterator>
unordered_map(InputIterator f, InputIterator l,
size_type n = 3,
const hasher& hf = hasher(),
const key_equal& eql = key_equal(),
const allocator_type& a = allocator_type());
用法参见:
http://publib.boulder.ibm.com/infocenter/comphelp/v9v111/index.jsp?topic=/com.ibm.xlcpp9.aix.doc/standlib/stl_unordered_map.htm


boost::unordered_map rt
该怎么用呢?
我用的是rt.insert(std::pair <string,double>(oper_name,time));
效果还是不对


  • 打赏
  • 举报
回复
map默认用迭代器遍历就是排序的。
你不想排序不用不就是了。
dskit 2009-08-26
  • 打赏
  • 举报
回复
unsorted_map
boost
wuxiaohu 2009-08-26
  • 打赏
  • 举报
回复
不想排序,用map干吗,那就用二维数组啊,哈
erwin1984 2009-08-26
  • 打赏
  • 举报
回复
估计LZ想拥有map的特性,同时又想按照插入的顺序遍历元素。

STL似乎没有现成的,可以考虑用一个 map<string,mylist_iterator> 来标示string是否存在,另外用一个 list< pair<string,double> > 来保存具体数据。

typedef list< pair<string,double> >::iterator mylist_iterator;

不过在插入删除数据时得同时操作两个对象,可以考虑封装成一个类。
wy2001wy 2009-08-26
  • 打赏
  • 举报
回复
不想排序就不要用map了嘛
2009-08-26
  • 打赏
  • 举报
回复
其实 map 内部实现好像就是排序树,这东西设计之初就是用来动态排序查找的。
如果不想排序,就从 vector、list 和 deque 这些顺序容器里面选一个吧,但是那样又不能高效查找了,具体怎么用就看楼主的需要了。
xujg811 2009-08-26
  • 打赏
  • 举报
回复
不想排序,是不是说明你取元素的时候是遍历取?
那就别用map,用list;
healer_kx 2009-08-26
  • 打赏
  • 举报
回复
Yes, UP
mstlq 2009-08-26
  • 打赏
  • 举报
回复
不想排序?
楼主可否考虑改用vector<pair<string,double> >?
2009-08-26
  • 打赏
  • 举报
回复
boost::unordered_map 是 hash 表

我也没有找到 unsorted_map
zzutnicholas 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 taodm 的回复:]
楼主要补基础了呀,莫于浮沙筑高台。
都开始接触boost了,却还没认真看过《effective stl》吧。
[/Quote]

惭愧,工程人员,不是专业人员

能用就行,呵呵
taodm 2009-08-26
  • 打赏
  • 举报
回复
楼主要补基础了呀,莫于浮沙筑高台。
都开始接触boost了,却还没认真看过《effective stl》吧。
zzutnicholas 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dskit 的回复:]
unsorted_map
boost
[/Quote]

我装的boost1.39好像没有这个unsorted_map。hpp
zzutnicholas 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dskit 的回复:]
unsorted_map
boost
[/Quote]

boost::unordered_map<string,double> rt
该怎么用呢?
我用的是rt.insert(std::pair<string,double>(oper_name,time));
效果还是不对

原数据:
FACING_1 246.069859
ROUGH_BORE_ID 631.877831
GROOVE_FACE 3.910494
FINISH_TURN_OD 9.119089
FINISH_TURN_OD_2 8.978312
FINISH_TURN_OD_1 8.665136
FINISH_TURN_OD_3 9.242448
ROUGH_BORE_ID_1 81.913576
GROOVE_ID 48.332078
GROOVE_ID_1 53.805978
FINISH_BORE_ID 1.666675


迭代输出数据:
FINISH_TURN_OD_3
FINISH_TURN_OD
ROUGH_BORE_ID_1
FINISH_TURN_OD_1
FACING_1
GROOVE_FACE
GROOVE_ID
FINISH_TURN_OD_2
FINISH_BORE_ID
GROOVE_ID_1
ROUGH_BORE_ID
bfzhao 2009-08-26
  • 打赏
  • 举报
回复
使用vector。map使用排序树来提高查询性能,你需要的不是查询,何必使用map?

64,654

社区成员

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

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