我正在为我的大学做一些在线问题。我对排序感到很困惑。我需要按降序打印我的输入,类型为int。但是,如果它们都具有相同的值,我需要按升序打印它们。我得到了这个输出。我真的很困惑这种排序算法,请问有什么想法吗? PS:对不起我的英文。
S 7
T 6
I 5
E 4
O 3
W 2
U 2
N 2
H 2
A 2
Y 1
Q 1
M 1
C 1
我希望这样:
S 7
T 6
I 5
E 4
O 3
A 2
H 2
N 2
U 2
W 2
C 1
M 1
Q 1
Y 1
这是我的代码:
#include "stdafx.h"
#include <stdio.h>
#include <vector>
#include <map>
#include <algorithm>
#include <ctype.h>
using namespace std;
int main()
{
freopen("in.txt", "rt",stdin);
freopen("output.txt", "wt",stdout);
int lineas,cont;
map<char,int> mapa;
char a;
vector< pair<int,char> > vec;
scanf("%d\n",&lineas);
while (lineas && scanf("%c",&a)!=EOF)
{
if (a=='\n')
{
scanf("\n");
lineas--;
}
else if ( (a>='a' && a<='z') || (a>='A' && a<='Z' ))
{
a=toupper(a);
mapa[a]++;
}
}
map<char,int>::iterator it;
vec.resize(mapa.size());
cont=0;
for (it=mapa.begin();it!=mapa.end();it++)
{
vec[cont].second=(*it).first;
vec[cont].first=(*it).second;
cont++;
}
sort(vec.begin(),vec.end());
reverse(vec.begin(),vec.end());
for (int i=0;i<vec.size();i++)
{
printf("%c %d\n",vec[i].second,vec[i].first);
}
return 0;
}