收录日期:2019/06/20 13:43:01 时间:2016/08/13 21:07:46 标签:C++ 语言
这个是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
    } 
内存是随机分配的啊?
结果导致输出无序。
怎么一回事呢?
求大虾帮忙啊!
map自动排序了

而题目中的木有自动排序

如果要做到跟题目中的一致
匹配下最开始的人名即可
5
dave
laura
owen
vick
amr
引用 2 楼 c_losed 的回复:
map自动排序了

而题目中的木有自动排序

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

请问怎么个匹配法呀?
如果是比赛的话有很多数据直接出过来的,
有没有什么办法让他不排序呢?
就是按原样输出?
map的实现是用的红黑树来实现的,因此是排过序的,因此如果你想按原样输出就要用vector或list不能用map
引用 3 楼 blueskycz 的回复:
引用 2 楼 c_losed 的回复:
map自动排序了

而题目中的木有自动排序

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

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


用vector或list

匹配即map的第一个key跟dave做对比
如果数据过多的话 而又不需要排序的话 还是不要用map了

MySQL的db表被删除了,怎么办 为什么我的Eclipse+PDT中的tasks视图不会更新了? 关于ASP链接的问题 wm6&wm5 模拟器可以运行,但手机却无法运行的情况大家遇到过么? 数据窗口过滤问题 asp.net listbox点击 image图片 关于数组计算的问题 蛋贴王子发飙了。。。。(二) 困扰了我好久,大家帮忙解决下,关于调用函数的简单问题? 网站后台中发布新闻的编辑区域是怎么写的?【图】 窗体调用时 show()和ShowDialog()的区别 求《OSPF协议剖析》和《OSPF协议完全实现》电子版 sql server2000 的查询分析器怎样更新显示 以及 关键字的查询问题 男人像桃子,女人像鸡蛋! 输入框如何不让跟着动?输入文字满了以后 下面的chm,如何制作,我目前只能弄出单层的 Mars199 要升, 升裤衩, 恭喜, 恭喜. GridView中的TextBox中的值编辑更新时存回数据库还是原来的值???? 请问如何在textfield中添加鼠标事件来实现消除默认值 Jquery与prototype之争 求高手帮忙 用WPF美化窗体 想学习开发C++项目,该看点什么好呢。 java Arraylist中变量的访问操作问题 在Linux操作系统下,gcc编译的怪问题,pow(2.0,3.0)=? 挣钱多就应该隔三差五的请客吗? 2000升级到2005变慢 大家看看这个是不是个BUG 简单得键盘事件 重金 寻求wince上(6410)播放rmvb视频的方案,期待与有成熟技术的公司合作!