根据关联的整数向量对字符串向量进行排序
Sorting a string vector based on an associated integer vector
我有两个向量
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;
}
在这里,我将排序方法与自定义比较器一起使用,询问我是否需要帮助理解语法。
相关文章:
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 构造<int>具有 2 个字符串文字的向量
- 如何将元素添加到向量的字符串位置
- 将向量解析<string>为字符串
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 在 C++11 中,如何查找并返回以给定字符串开头的字符串向量中的所有项?
- 如何使用向量字符串令牌构建表达树
- 将 argv 复制到新的全局向量字符串
- 如何读取控制台输入并将其存储到向量字符串中
- 向量字符串push_back在C 中不起作用
- C char数组和向量字符串
- 可以直接初始化向量<字符串 *> 而不使用 new 吗?
- 迭代向量字符串的字符(C++禁止指针和整数之间的比较)
- 比较两个向量字符串的相似性C++
- 我有麻烦将字符串放入向量字符串
- 如何从一个向量字符串得到一个字符串的联合集
- 函数返回向量/字符串,但不返回数组
- 向量向量字符串固定大小
- c++向量字符串排序不工作
- C++将字符串数组[]复制到向量<字符串>