C++ map问题求教!(高悬赏 200财富)
#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直接排序吗?如果是的话,请问为什么我的不能排序?
我的程序那里出问题了?请直接在我源代码上修改!(最好写上注释!)
谢谢你们的解答! 展开
#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;
}
这个因为你用的是map啊。。。。相同的sum不能存两个映射,用multimap的话输出又很麻烦,不用map可否?
#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;
}