首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-24 
C++ STL中MAP的输出顺序问题这个是USACO题库里边的一个题目:http://www.nocow.cn/index.php/Translate:USA

C++ STL中MAP的输出顺序问题
这个是USACO题库里边的一个题目:http://www.nocow.cn/index.php/Translate:USACO/gift1

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

C/C++ code
# 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
  } 
内存是随机分配的啊?
结果导致输出无序。
怎么一回事呢?

[解决办法]
map自动排序了

而题目中的木有自动排序

如果要做到跟题目中的一致
匹配下最开始的人名即可
5
dave
laura
owen
vick
amr
[解决办法]
map的实现是用的红黑树来实现的,因此是排过序的,因此如果你想按原样输出就要用vector或list不能用map

热点排行
Bad Request.