Сортировка vector> по second

Как отсортировать vector<pair<int,int>> по second. Например, вектор пар является: 1 - 60 2 - 80 3 - 40 4 - 10 Нужно получить: 1 - 10 2 - 40 3 - 60 4 - 80


Ответы (1 шт):

Автор решения: Harry

Написать соответствующий компаратор:

sort(v.begin(),v.end(),[](auto a, auto b){ return a.second < b.second; });

Если же вы хотите не сортировать, а переупорядочить содержимое пар, как в примере - ну, первое, что приходит на ум - дополнительный вектор, типа

vector<pair<int,int>> v { {1,60},{2,80},{3,40},{4,10}};
vector<int> tmp;
for(auto& e: v) tmp.push_back(e.second);
sort(tmp.begin(),tmp.end());
for(int i = 0; i < v.size(); ++i ) v[i].second = tmp[i];
→ Ссылка