根据关联的整数向量对字符串向量进行排序

Sorting a string vector based on an associated integer vector

本文关键字:向量 字符串 排序 关联 整数      更新时间:2023-10-16

我有两个向量

vector<string> names={"Raymond","Cynthia","David","William","Mike"} 

,然后我正在对每个学生进行get_mark()呼吁以获得

vector<int> marks={50,80,45,25,90} . 

现在我需要根据学生的分数对两个向量进行排序,即,结果必须是

vector<int> marks_sorted ={25,45,50,80,90} 

vector<string> names_sorted ={"William","David","Raymond","Cynthia","Mike"}

我可以想到的一种方法是先对标记进行排序,然后比较已排序和未排序的标记向量,然后对名称进行排序,但是有没有一种优雅的方法可以做到这一点?

-只需添加一种方法以供其他人参考

#include "stdafx.h"
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <vector>
using std::vector;
#include <utility>
using std::pair;
#include <algorithm>
using std::sort;
#include <string>
using std::string;
int _tmain(int argc, _TCHAR* argv[])
{
    vector<int> data ;
data.push_back(5);
data.push_back(16);
data.push_back(4);
data.push_back(99);
vector<string> names ;
names.push_back("Crystal");
names.push_back("Bob");
names.push_back("Mynah");
names.push_back("TopNerd");
vector<int> index(data.size(), 0);
for (int i = 0 ; i != index.size() ; i++) {
    index[i] = i;
}
sort(index.begin(), index.end(),
    [&](const int& a, const int& b) {
        return (data[a] < data[b]);
    }
);
for (int i = 0 ; i != index.size() ; i++) {
    cout << index[i] << endl;
}

    for (int i = 0 ; i != index.size() ; i++) {
    cout << data[index[i]] << endl;
}

        for (int i = 0 ; i != index.size() ; i++) {
    cout << names[index[i]] << endl;
}


    getchar();
    return 0;
}
这样做

的一种优雅方法(在我看来)如下

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <vector>
using std::vector;
#include <utility>
using std::pair;
#include <algorithm>
using std::sort;
#include <string>
using std::string;
int main() {
    vector<pair<string, int>> vector_of_students
        {{"Raymond", 1}, {"Cynthia", 80}, {"David", 85}};
    std::sort(vector_of_students.begin(), vector_of_students.end(),
            [](const std::pair<string, int>& p1, const std::pair<string, int>& p2) {
                return p1.second < p2.second;
            });
    // print the values out
    for (const auto& pa : vector_of_students) {
        cout << pa.first << 't' << pa.second << endl;
    }
    return 0;
}

在这里,我将排序方法与自定义比较器一起使用,询问我是否需要帮助理解语法。