C++ map问题求教!(高悬赏 200财富)

#include<iostream>#include<stdio.h>#include<map>#include<stdlib.h>usingnamespacestd;i... #include <iostream>
#include <stdio.h>
#include <map>
#include <stdlib.h>

using namespace std;

int main()
{
map <int,int> score;
map <int,int> :: iterator it;
int i;
cin>>i;
for(int k=0;k<i;k++)
{
int a,b,c;
cin>>a>>b>>c;
int sum=a+b+c;
score.insert(pair<int,int>(sum,k+1));
}
static int print_count;
for(it=score.end();it!=score.begin();it--)
{
cout<<it->first<<" "<<it->second<<endl;
print_count++;
if(print_count==5)
{
return EXIT_SUCCESS;
}
}
return 0;
}
请问map不可以对sum直接排序吗?如果是的话,请问为什么我的不能排序?
我的程序那里出问题了?请直接在我源代码上修改!(最好写上注释!)
谢谢你们的解答!
展开
 我来答
D_EVILmC
2015-04-19 · 超过16用户采纳过TA的回答
知道答主
回答量:27
采纳率:0%
帮助的人:35.8万
展开全部

#include <iostream>

#include <stdio.h>

#include <map>

#include <stdlib.h>


using namespace std;


int main()

{

    map <int,int> score;

    //map <int,int> :: iterator it;

    map<int, int>::reverse_iterator it;  //改用反向迭代器

    int i;

    cin>>i;

    for(int k=0;k<i;k++)

    {

        int a,b,c;

        cin>>a>>b>>c;

        int sum=a+b+c;

        score.insert(pair<int,int>(sum,k+1));

    }

    static int print_count = 0; //记得赋初值

    

    for(it=score.rbegin() ;it!=score.rend();++it)//这里用反向迭代器

    {//it=score.end()你原来的这个语句让it指向了score的尾后迭代器,又想直接输出这是不行的,尾后迭代器指向

    //的是最后一个元素后面的位置而不是最后一个元素,所以第一个输出会出问题,反过来输出的时候用反向迭代器比较方便

        cout<<it->second<<" "<<it->first<<endl;//first和second换个位置

        print_count++;

        if(print_count==5)

        {

            return EXIT_SUCCESS;

        }

    }

    /*static int print_count;

    for(it=score.end();it!=score.begin();it--)

    {

        cout<<it->first<<" "<<it->second<<endl;

        print_count++;

        if(print_count==5)

        {

            return EXIT_SUCCESS;

        }

    }*/

    return 0;

}

更多追问追答
追问

不好意思 打扰一下 请问这一组数据不能通过 麻烦您帮我再修改一下,谢谢!

样例输入

8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

样例输出

8 265
2 264
6 264
1 258
5 258

追答
这个因为你用的是map啊。。。。相同的sum不能存两个映射,用multimap的话输出又很麻烦,不用map可否?
IT孤鹜
2015-04-19 · TA获得超过4197个赞
知道大有可为答主
回答量:3960
采纳率:71%
帮助的人:3547万
展开全部
#include <iostream>
#include <stdio.h>
#include <map>
#include <stdlib.h>

using namespace std;

int main()
{
    map <int,int,greater<int> > score;
    map <int,int,greater<int> > :: iterator it;
    int i;
    cin>>i;
    for(int k=0;k<i;k++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        int sum=a+b+c;
        score.insert(pair<int,int>(sum,k+1));
    }
    static int print_count;
    for(it=score.begin();it!=score.end();it++)
    {
        cout<<it->first<<" "<<it->second<<endl;
        print_count++;
        if(print_count==5)
        {
            return EXIT_SUCCESS;
        }
    }
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式