C++ 在c++;排序字符串时

C++ 在c++;排序字符串时,c++,arrays,sorting,c++14,C++,Arrays,Sorting,C++14,我在解决一个问题,在这个问题上,我们得到了一个名字和一个整数。必须打印三个最大整数值的名称 因此,我将数字转换为字符串,并将其连接到名称之前。分类之后,我得到了想要的结果。但是它失败了一些测试案例,这让我对C++中的排序函数如何工作感到好奇。 这是我的密码: #包括 #定义ll long long int 使用名称空间std; int main(){ ll n; cin>>n; 字符串名[n]; 整数arr[n],数字[n]; 对于(int i=0;i>名称[i]>>arr[i]; 名称[i]=

我在解决一个问题,在这个问题上,我们得到了一个名字和一个整数。必须打印三个最大整数值的名称

因此,我将数字转换为字符串,并将其连接到名称之前。分类之后,我得到了想要的结果。但是它失败了一些测试案例,这让我对C++中的排序函数如何工作感到好奇。 这是我的密码:

#包括
#定义ll long long int
使用名称空间std;
int main(){
ll n;
cin>>n;
字符串名[n];
整数arr[n],数字[n];
对于(int i=0;i>名称[i]>>arr[i];
名称[i]=to_字符串(arr[i])+名称[i];
}
对于(int i=0;i大于
根据ASCII值将数字排序为小于字符

你不应该一开始就把它们连接起来

1) 使用
std::pair
对整数和字符串进行分组

2) 使用
std::vector
,而不是C数组

3) 编写一个comparator函子(或lambda),根据对的int值对其进行排序。比较
std::pair
会自动比较它们的
。第一个
元素,即您的整数值


4) 使用详细的
std::
,或
使用std::string
等,而不是
使用名称空间…
,因为您的全局名称空间将非常快地变得非常拥挤。

因为
大于
根据ASCII值将数字排序为小于字符

你不应该一开始就把它们连接起来

1) 使用
std::pair
对整数和字符串进行分组

2) 使用
std::vector
,而不是C数组

3) 编写一个comparator函子(或lambda),根据对的int值对其进行排序。比较
std::pair
会自动比较它们的
。第一个
元素,即您的整数值



4) 使用冗长的
std:
,或
使用std::string
等,而不是
使用名称空间…
,因为您的全局名称空间将非常快地变得非常拥挤。

的ASCII代码
'h'
(104)大于
'9'
(57)或任何其他数字的ASCII代码。这就是为什么。不要使用
\include
()使用低字母定义(<代码> >定义LL long long int /Cuth>)会导致许多意外问题,使用<代码>使用< /C> >(<代码>使用LL=未签名的long long;)。动态大小数组(<代码>字符串名称[n] < /代码>)不是标准C++,而是扩展使用STD容器。“竞争性编码”学习一种语言(任何语言)的环境。竞争性编码在所有错误的地方进行优化,并淡化“真实”程序中需要的东西——可读性、可维护性、模块性。
'h'
(104)的ASCII码大于
'9'
(57)的ASCII码或任何其他数字。这就是为什么。不要使用
#include
(),使用小写字母定义(
#define ll long long int
)可能会导致许多意外问题,请改用
使用
使用ll=unsigned long;
)。动态大小数组(
字符串名称[n]
)不是标准C++,而是一个扩展使用STD容器。我想扩展到@ T.NIESE:不要使用“竞争编码”环境来学习语言(任何语言)。竞争性编码在所有错误的地方都优化,并且强调那些你想要的“真实”。程序——可读性、可维护性、模块化。
9huDmy
995YnAYoAEE
990RUTM
96ipORo
956LNjFa