C++ STL中MAP的输出顺序问题

blueskycz 2012-02-27 01:25:49
这个是USACO题库里边的一个题目:http://www.nocow.cn/index.php/Translate:USACO/gift1

结果都是正确的,但是输出的顺序却和要求的不同

# include <fstream>
# include <map>
# include <string>
using namespace std;

int main(void)
{
ifstream cin("gift1.in");
ofstream cout("gift1.out");
int np; map<string, int> person;
cin >> np; string Recipient;

for(int i = 0; i < np; i++) {
cin >> Recipient;
person.insert(pair<string, int>(Recipient, 0)); //将名字加入到集合PERSON
}
for(int i = 0; i < np; i++) {
int m, n; string Giver; //n为收礼者数目
cin >> Giver; cin >> m; //输入给予者名字 与 钱数
cin >> n; if(n) m = m / n;
for(int j = 0; j < n; j++) {
cin >> Recipient;
person[Giver] -= m;
person[Recipient] += m;
}
}
map<string, int> ::iterator iter;
for(iter = person.begin(); iter != person.end(); iter++)
cout << iter->first << " " << iter->second << endl;
exit(0);
}



in:
5
dave
laura
owen
vick
amr
dave
200 3
laura
owen
vick
owen
500 1
dave
amr
150 2
vick
owen
laura
0 2
amr
vick
vick
0 0

这个是我的输出:
out:
amr -150
dave 302
laura 66
owen -359
vick 141

原来要求的是:
dave 302
laura 66
owen -359
vick 141
amr -150

这个输出每次都不一样,我猜是不是插入数据进入PERSON时,
for(int i = 0; i < np; i++) {
cin >> Recipient;
person.insert(pair<string, int>(Recipient, 0)); //将名字加入到集合PERSON
}
内存是随机分配的啊?
结果导致输出无序。
怎么一回事呢?
...全文
783 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
c_losed 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 blueskycz 的回复:]

引用 2 楼 c_losed 的回复:
map自动排序了

而题目中的木有自动排序

如果要做到跟题目中的一致
匹配下最开始的人名即可
5
dave
laura
owen
vick
amr

请问怎么个匹配法呀?
如果是比赛的话有很多数据直接出过来的,
有没有什么办法让他不排序呢?
就是按原样输出?
[/Quote]

用vector或list

匹配即map的第一个key跟dave做对比
如果数据过多的话 而又不需要排序的话 还是不要用map了
nice_cxf 2012-02-27
  • 打赏
  • 举报
回复
map的实现是用的红黑树来实现的,因此是排过序的,因此如果你想按原样输出就要用vector或list不能用map
blueskycz 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 c_losed 的回复:]
map自动排序了

而题目中的木有自动排序

如果要做到跟题目中的一致
匹配下最开始的人名即可
5
dave
laura
owen
vick
amr
[/Quote]
请问怎么个匹配法呀?
如果是比赛的话有很多数据直接出过来的,
有没有什么办法让他不排序呢?
就是按原样输出?
c_losed 2012-02-27
  • 打赏
  • 举报
回复
map自动排序了

而题目中的木有自动排序

如果要做到跟题目中的一致
匹配下最开始的人名即可
5
dave
laura
owen
vick
amr
blueskycz 2012-02-27
  • 打赏
  • 举报
回复
求大虾帮忙啊!

64,681

社区成员

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

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