gpt4 book ai didi

c++ - 假设我们有两个 std::vector v1 和 v2,并且我们不想将它们组合在一个结构中。如何以与排序转换 v1 相同的方式转换 v2 ?

转载 作者:行者123 更新时间:2023-12-03 00:17:43 25 4
gpt4 key购买 nike

这是 this question 的后续内容。唯一的区别是两个 vector 不能组合在一个结构中。

假设我们有一个 vector

std::vector<double> v1 = {9.0,5.0,3.0,2.0,1.0};

现在我们对 vector v1进行排序。令 v2

std::vector<std::string> v2 = {"you?","are","how","there","hello"};

如何像按排序转换 v1 一样转换 v2?

最佳答案

基于this answer ,您可以使用索引数组对 double vector 进行“排序”,然后仅使用生成的索引数组对字符串 vector 进行索引。

#include <algorithm>
#include <iostream>
#include <string>
#include <numeric>

int main()
{
std::vector<double> v1 = {5.0,9.0,3.0,2.0,1.0};
std::vector<std::string> v2 = {"are", "you?","how","there","hello"};

// Create an array of indices, starting from 0
std::vector<int> index(v1.size());
std::iota(index.begin(), index.end(), 0);

// "Sort" the index array according to the value in the vector of doubles
std::sort(index.begin(), index.end(),
[&](int n1, int n2){ return v1[n1] < v1[n2]; });

// Output results
for (auto i : index )
std::cout << v2[i] << " " << v1[i] << ", index is " << i << "\n";
}

输出:

hello 1, index is 4
there 2, index is 3
how 3, index is 2
are 5, index is 0
you? 9, index is 1
<小时/>

注意:

我更改了原始数据来说明索引数组的工作原理。

关于c++ - 假设我们有两个 std::vector v1 和 v2,并且我们不想将它们组合在一个结构中。如何以与排序转换 v1 相同的方式转换 v2 ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60686899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com