收录日期:2019/04/18 21:10:20 时间: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了

这个函数EditDocumentButton.EditDocument(strDocument, varProgID)里表示用WORD打开的varProgID是什么 大姑娘(未婚,没有男朋友)初来驾到,以后还往哥哥姐姐们多照顾啊, 关于winsockIP的地址获得 dreamweaver工具打开的代码出现乱码 如何解决? 有关powerdesigner的一个小问题,怎么能去掉代码中的引号[\"\"]? 把server.xml 中port=\"8080\"改成80 再启动tomcat时,tomcat一闪而过,为什么? 请高手们谈谈经验吧 有人知道通过VB的方法获取Windows的语言版本是中文还是英文? 重点咨询?????????????? 在sql server中生成script问题 sql有没有简单的算法,一句话的~~ 有没有相关的api文档可查看? 我从CEdit派生一个类,为什么不支持拷贝,粘贴功能呢? 一家生产钮扣的厂需要OA,CRM 关于winsockIP的地址获得 我在安装某些exe程序时,系统提示无法安装,请问如何解决 异常详细信息: System.Data.SqlClient.SqlException: 用户 \'PRINTER\\ASPNET\' 登录失败。 一家生产钮扣的厂需要OA,CRM 再请朋友帮助:如何确定richtextbox中某一字符的坐标?? 如何实现在任务栏弹出淡黄色的小提示框 window 2000 professional可以开发.net程序么? 数据库中的字符型数据 \'Y\',\'N\' 在datagrid中用checkbox表达出来?? 菜鸟学习中。。。有关windows服务的问题 请问能不能设置listbox的项的背景颜色 文件上传遇到的高级新问题!!!高手速来解决。 在线等 谁知道如何不拔掉usb插头而让摄像头跟拔掉效果一样?还有如何关闭它的夜视功能? 使用页面缓存后,如何通过程序使缓存过期? 如何实现在任务栏弹出淡黄色的小提示框 应用程序怎么知道自己被打开了? 为什么装WIN98可以,但装WIN2000过程中出现死机?