首页 > 后端开发 > C++ > 如何根据参考向量同时对多个向量进行排序?

如何根据参考向量同时对多个向量进行排序?

Patricia Arquette
发布: 2025-01-03 18:16:43
原创
214 人浏览过

How to Sort Multiple Vectors Simultaneously Based on a Reference Vector?

基于外部参考向量对向量进行排序

在存在多个长度相等的向量的情况下,对一个向量进行排序需要一个解决方案:同时相应地变换所有其他向量。

考虑以下内容场景:

std::vector<int> Index = { 3, 1, 2 };
std::vector<std::string> Values = { "Third", "First", "Second" };
登录后复制

转换:索引已排序。

预期结果:值也应该排序。

一种方法涉及创建一个向量,其中包含原始索引和排序指令中的元素向量:

typedef vector<int>::const_iterator myiter;

vector<pair<size_t, myiter>> order(Index.size());

size_t n = 0;
for (myiter it = Index.begin(); it != Index.end(); ++it, ++n)
    order[n] = make_pair(n, it);
登录后复制

接下来,对这个向量进行排序:

struct ordering {
    bool operator ()(pair<size_t, myiter> const&amp; a, pair<size_t, myiter> const&amp; b) {
        return *(a.second) < *(b.second);
    }
};

sort(order.begin(), order.end(), ordering());
登录后复制

排序顺序允许重新排列其他向量:

template <typename T>
vector<T> sort_from_ref(
    vector<T> const& in,
    vector<pair<size_t, myiter>> const& reference
) {
    vector<T> ret(in.size());

    size_t const size = in.size();
    for (size_t i = 0; i < size; ++i)
        ret[i] = in[reference[i].first];

    return ret;
}
登录后复制

以上是如何根据参考向量同时对多个向量进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板