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

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

Patricia Arquette
发布: 2024-12-14 15:50:11
原创
546 人浏览过

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

根据另一个向量的值对向量进行排序

考虑这样一种情况,您有多个相同长度的向量,并且需要对其中一个向量进行排序,同时保持相同的长度所有其他向量的排序顺序。当排序值用作其他向量中元素的引用时,这可能很有用。

在提供的代码片段中,我们有两个向量:索引和值。 Index 包含表示所需排序顺序的整数,Values 包含将相应排序的字符串。

一种方法是创建一个组合 Index 和 Values 元素的对向量,然后使用自定义比较器。操作方法如下:

using myiter = std::vector<int>::const_iterator;

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

size_t n = 0;
for (const auto& it : Index) {
    order[n++] = std::make_pair(n, it);
}

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

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

顺序向量现在包含按排序顺序排列的索引和值中的元素。您也可以使用它对其他向量进行排序。这是一个执行此操作的函数模板:

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

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

    return ret;
}
登录后复制

使用此函数,您现在可以根据索引指定的顺序获取 Values 的排序版本:

std::vector<std::string> sortedValues = sort_from_ref(Values, order);
登录后复制

此方法允许您可以以一致的方式有效地对多个向量进行排序,而不需要复杂的迭代解决方案。

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

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