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

Posted

技术标签:

【中文标题】根据关联的整数向量对字符串向量进行排序[重复]【英文标题】:Sorting a string vector based on an associated integer vector [duplicate] 【发布时间】:2016-02-11 21:00:24 【问题描述】:

我有两个向量

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;


【问题讨论】:

std::vector&lt;Student&gt; 怎么样,Student 是一个有名字和标记的类?更有意义。因为您不想为 100 个属性使用 100 个 std::vectors。 投反对票。提问前先搜索。 【参考方案1】:

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

#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;

这里我使用了带有自定义比较器的排序方法,请问您是否需要帮助理解语法。

【讨论】:

如果你以相反的方式存储对,你甚至不需要比较 lambda。 我认为这不是很清楚

以上是关于根据关联的整数向量对字符串向量进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在c ++中给出两个整数向量(相同的大小和类型),我想从最小到最大的元素对一个进行排序并更改第二个向量的顺序[重复]

根据一个的排列对三个向量进行排序,并带有重复项。

我如何按类属性对C++向量数组进行排序[重复]

创建字符指针向量以指向字符串向量

使用整数向量的向量对整数向量进行基数排序

C++ 对向量或链表进行排序