我有一个vector1
pair
,按int
键排序:
std::vector <pair <int,string> > vector1;
//6 5 1 8 4 2
然后我有另一个vector2
由vector1
中包含的数字组成:
std::vector <string> vector2;
//1 5 6 8
如何使用与vector2
中相同的键对vector1
进行排序?我想得到:
unsorted: 1 5 6 8
sorted: 6 5 1 8
unsorted: 6 5 1 2 4
sorted: 6 5 1 2 4
答案 0 :(得分:0)
您可以创建值的地图,例如
void SortAccording(std::vector<int>& vec, const std::vector<std::pair<int, string>>& ref)
{
std::map<int, int> m;
int counter = 0;
for (auto& p : ref) {
m[p.first] = counter++;
}
std::sort(vec.begin(),
vec.end(),
[&](int lhs, int rhs) { return m.at(lhs) < m.at(rhs); });
}
答案 1 :(得分:0)
如果vector2由始终出现在vector1中的数字组成,则可以映射来自vector1的数字,例如vector1为[3, 2, 4]
而vector2为[4, 3]
;
3->0, 2->1, 4->2
(键是数字,值是索引)。使用map或hashmap
它。4 becomes 2, 3 becomes 0
所以现在vector2变为[2, 0]
sort(vector2.begin(), vector2.end());
vector2变为[0, 2]
0->3
(因为vector1中第0个索引处的数字是3),2->4
(因为vector1中第2个索引处的数字是4)。
希望这会有所帮助。