나는 정수와 함께 이름이 주어진 문제인 QuestionsLink를 해결하고있었습니다 . 최대 정수 값으로 세 개의 이름을 인쇄해야합니다.
그래서 숫자를 문자열로 변환하고 이름 앞에 연결했습니다. 정렬 후 원하는 결과를 얻었습니다. 그러나 C ++의 정렬 기능이 어떻게 작동하는지 궁금하게 만드는 일부 테스트 케이스가 실패했습니다.
내 코드는 다음과 같습니다.
#include <bits/stdc++.h>
#define ll long long int
using namespace std;
int main() {
ll n;
cin >> n;
string names[n];
int arr[n], digits[n];
for (int i = 0; i < n; i++) {
cin >> names[i] >> arr[i];
names[i] = to_string(arr[i]) + names[i];
}
for (int i = 0; i < n; i++) {
digits[i] = floor(log10(arr[i]) + 1);
}
sort(names, names + n, greater<string>());
for (int i = 0; i < n; i++) {
cout << names[i] << endl;
}
/*for(int i=0;i<3;i++){
string s = names[i].substr(digits[i],names[i].length());
cout<<s<<endl;
}
cout<<digits[98];
*/
return 0;
}
테스트 사례 :
9huDmy
995YnAYoAEE
990RUTM
96ipORo
956LNjFa
그래서, 내림차순으로 정렬 한 후 9huDmy는 상단에 있고 다음 두 개는 앞에있는 숫자를 기준으로 정렬됩니다.
greater<string>
ASCII 값을 기준으로 숫자를 문자보다 작게 정렬 하기 때문입니다.
처음에 그것들을 연결해서는 안됩니다.
1) std::pair< int, std::string >
정수와 문자열을 그룹화하는 데 사용 합니다.
2) std::vector< std::pair< int, std::string > >
C 배열이 아닌를 사용하십시오 .
삼) int 값에 따라 쌍을 정렬하는 비교기 펑터 (또는 람다)를 작성하십시오.비교는 std::pair
자동으로 해당 .first
요소, 즉 정수 값을 비교 합니다.
4) 사용 자세한 std::
, 또는 using std::string
등이 아닌 using namespace ...
, 글로벌 네임 스페이스로 무섭게 매우 빠른 혼잡 얻을 것이다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다