根据关联的整数向量对字符串向量进行排序[重复]
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<Student>
怎么样,Student
是一个有名字和标记的类?更有意义。因为您不想为 100 个属性使用 100 个 std::vector
s。
投反对票。提问前先搜索。
【参考方案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。 我认为这不是很清楚以上是关于根据关联的整数向量对字符串向量进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章