Я пытаюсь сортировать вектор пар по первому значению в паре. Я попытался следовать советам по ответам на другие вопросы по этому вопросу, которые уже были опубликованы, но у меня возникли проблемы с получением вектора для сортировки по какой-то причине. Я пробовал использовать std :: sort и std :: stable_sort безрезультатно. Код компилируется отлично и работает без жалоб, но массив не сортируется. Мой пример кода ниже:Как отсортировать вектор пар по первому элементу?
#include <iostream>
#include <vector>
#include <algorithm>
bool compare(const std::pair<int, int>&i, const std::pair<int, int>&j){
return i.first < j.first;
}
int main(){
std::vector<std::pair<int, char>> vec;
vec.reserve(10); // reserve space for 10 elements
int i;
std::string letters = "abcdefghij";
int randNum;
for(i=0; i<10; i++){
randNum = std::rand()%(10-0 + 1); // generate random numbers between 0 and 10
vec[i].first = randNum; // assign random integer to first element of pair
vec[i].second = letters[i]; // assign letter to second element of pair
}
for(i=0; i<10; i++){ // print out unsorted array
std::cout << vec[i].first << " " << vec[i].second << "\n";
}
std::cout << "\n";
std::sort(vec.begin(), vec.end(), compare);
for(i=0; i<10; i++){ // print out sorted array
std::cout << vec[i].first << " " << vec[i].second << "\n";
}
return 1;
}
Полученный результат выглядит так:
10 a
1 b
0 c
6 d
8 e
3 f
2 g
0 h
9 i
4 j
10 a
1 b
0 c
6 d
8 e
3 f
2 g
0 h
9 i
4 j
В вашем коде отображается неопределенное поведение. Вектор имеет размер 0, до, во время и после сортировки. Вы получаете доступ к элементам, находящимся за концом буфера. Замените 'vec.reserve (10);' с 'vec.resize (10);' –
Большое спасибо, это решило мою проблему! – SomeRandomPhysicist