让STL map的元素按照insert的顺序排列

JustYan 2008-11-26 10:42:04
  最近刚开始使用STL中的容器,发现map中的元素在insert之后,会自动依key排序。
  我想问一下,各位高手,能不能让map的元素按照insert的顺序排列,而不是自动的依key自动排序?
...全文
6437 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshuise 2008-11-27
  • 打赏
  • 举报
回复
std::unorder_map试试
The_eagles 2008-11-27
  • 打赏
  • 举报
回复


你想按照insert的顺序也行,把插入的顺序作为key。把你原来的key放在value里面。
比如说 你要实现一个map<string,string>,可以这样,先定义一个结构体

struct XXX
{
string vKey;// 你原来的key
string Val;// 你实际要存放的东东。

}

//插入的时候就可以insert<int,XXX>;
//读取的时候可能就比较麻烦了,要先判断value里面的vkey是不是你要的key。

其实呢,还不如用vector 。仍然是定义一个结构体。把你的key放在结构体里面。和上面一样。
hacker1125 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 airtrack 的回复:]
那就没必要用map了,用vector就行,vector中放pair <first, second>就行了。
[/Quote]
能否举个例子。。。。
云梦谭 2008-11-27
  • 打赏
  • 举报
回复
使用关联容器的优势就是自动排序,查找效率高。要不就使用线性容器好了
JustYan 2008-11-27
  • 打赏
  • 举报
回复
唉,用map,还不要自动排序,看来我真的是想晕了。。。
帅得不敢出门 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Wolf0403 的回复:]
引用 1 楼 airtrack 的回复:
那就没必要用map了,用vector就行,vector中放pair <first, second>就行了。


up
[/Quote]
up too
Wolf0403 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 airtrack 的回复:]
那就没必要用map了,用vector就行,vector中放pair <first, second>就行了。
[/Quote]

up
sagegz 2008-11-27
  • 打赏
  • 举报
回复
好久没看STL了...
carylin 2008-11-27
  • 打赏
  • 举报
回复
事实上是不行的。map是不能认为设定排序规则的。
lann64 2008-11-27
  • 打赏
  • 举报
回复
map的好处就在有序。不要标准库的map排序?要么不用map,要么自己重新写一个自己的版本。

试试把比较算子替换了能不能就不排序了,呵呵。
jiyanmoyu 2008-11-27
  • 打赏
  • 举报
回复
几乎不可能实现,除非你修一修红黑树的源代码,我这里有一个倒过来的。。。
#include<map>
#include<iostream>
#include<iterator>
#include<algorithm>
using namespace std;

template<typename valuetype>
struct compare
{
bool operator()(valuetype value1,valuetype value2)
{
return true;
}
};

int main()
{
map<int,int,compare<int> > mymap;
mymap.insert( pair<int,int>(4,4));
mymap.insert( pair<int,int>(5,5));
mymap.insert( pair<int,int>(3,3));

for(map<int,int,compare<int> >::iterator it=mymap.begin();it!=mymap.end();++it)
cout<<it->first<<" ";
cout<<endl;
return 0;
}
nullah 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 airtrack 的回复:]
那就没必要用map了,用vector就行,vector中放pair <first, second>就行了。
[/Quote]
UP
airtrack 2008-11-26
  • 打赏
  • 举报
回复
那就没必要用map了,用vector就行,vector中放pair<first, second>就行了。

65,213

社区成员

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

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