gpt4 book ai didi

c++ - 多 vector 函数

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:54 24 4
gpt4 key购买 nike

我有一个 vector 排序算法,我想将它应用于多个 vector ,但不知道有多少。我唯一确定的是至少有 1 个 vector (总是相同的)我将在其上执行我的算法。其他人将紧随其后。

这是一个例子:

void sort(std::vector<int>& sortVector, std::vector<double>& follow1, std::vector<char>& follow2, ... ){
for (int i = 1; i<vector.size(); ++i){
if ( vector[i-1] > vector[i] ) { //I know it's not sorting here, it's only for the example
std::swap(vector[i-1], vector[i]);
std::swap(follow1[i-1], follow1[i]);
std::swap(follow2[i-1], follow2[i]);
....
}
}
}

我正在考虑使用可变参数函数,但由于它是一个递归函数,我想知道每次创建我的 va_arg 列表是否不会花费太多时间(我正在处理大小为 5 亿/10 亿的 vector ...... ).那么还有其他东西存在吗?

当我写这个问题时,我明白也许我在自欺欺人,没有其他方法可以实现我想要的,可变参数函数可能不会那么长。 (我真的不知道,事实上)。

编辑:事实上,我正在对数据进行八叉树排序,以便在 opengl 中使用。
由于我的数据并不总是相同的(例如 OBJ 文件会给我法线,PTS 文件会给我强度和颜色,......),我希望能够重新排序我的所有 vector (其中包含我的数据)所以它们与位置 vector 具有相同的顺序(包含我的点位置的 vector ,它将始终在这里)。

但是我所有的 vector 都将具有相同的长度,我希望我所有的 followervector 被重组为第一个 vector 。

如果我有 3 个 vector ,如果我交换第一个 vector 中的第一个和第三个值,我想交换其他 2 个 vector 中的第一个和第三个值。

但我的 vector 并不完全相同。有些会是std::vector<char> , 其他 std::vector<Vec3> , std::vector<unsigned> , 等等。

最佳答案

range-v3 ,你可以使用 zip,像这样:

template <typename T, typename ... Ranges>
void sort(std::vector<T>& refVector, Ranges&& ... ranges){
ranges::sort(ranges::view::zip(refVector, std::forward<Ranges>(ranges)...));
}

Demo

或者,如果您不想使用范围进行比较(对于 refVector 中的关系),您可以设计为仅使用 refVector:

template <typename T, typename ... Ranges>
void sort(std::vector<T>& refVector, Ranges&& ... ranges){
ranges::sort(ranges::view::zip(refVector, std::forward<Ranges>(ranges)...),
std::less<>{},
[](auto& tup) -> T& { return std::get<0>(tup); });
}

关于c++ - 多 vector 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46032081/

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