用另一个列表的索引排序一个列表



我正试图根据字符串列表对索引列表进行排序,并且我收到下面的错误-分割错误。我不明白为什么我收到这个错误,如何解决它?

#include <iostream>
#include <string.h>
using namespace std;
int main() {
int size = 5;
char* mass[size];
int num[size];
for(int i = 0; i < size; i++) {
mass[i] = new char[20];
num[i] = i;
cin >> mass[i];
}

for(int i = 0; i < size; i++){
for(int j = size; j > i; j--)
if(strcmp(mass[num[j-1]], mass[num[j]]) > 0){
int tmp = num[j-1];
num[j-1] = num[j];
num[j] = tmp;
}
}

for(int i = 0; i < size; i++){
cout << mass[num[i]] << ", ";
}
return 0;
}

在内部循环中,您从j = size开始,然后num[j]是一个越界数组访问。

在现代c++中,你可以这样解决:

#include <iostream>
#include <array>
#include <algorithm>
int main() {
const int size = 5;
std::array<std::string, size> mass;
std::array<int, size> num;
for (int i = 0; i < size; i++) {
std::cin >> mass[i];
num[i] = i;
}
std::ranges::sort(num, [mass](int a, int b) { return mass[a] <= mass[b];});
for(int i = 0; i < size; i++){
std::cout << mass[num[i]] << ", ";
}
std::cout << std::endl;
return 0;
}

最新更新