首页 > 后端开发 > C++ > 如何根据另一个'std::vector”的顺序对一个'std::vector”进行排序?

如何根据另一个'std::vector”的顺序对一个'std::vector”进行排序?

DDD
发布: 2024-12-07 12:16:13
原创
718 人浏览过

How to Sort One `std::vector` Based on the Order of Another?

根据不同 std::vector 的值对 std::vector 进行排序

此问题涉及将向量的排序与另一个向量的顺序。例如,向量 Index 包含数字 [3, 1, 2],向量 Values 包含字符串“Third, First, Second”。按升序排序索引 ([1, 2, 3]) 应该会导致值按相应的顺序排序 (["First", "Second", "Third"])。

解决方案:

一种常见的方法是通过组合 Index 中的索引及其 Values 中的相应元素来创建向量顺序。然后可以使用自定义比较器对该向量进行排序,该比较器比较索引中的元素:

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&amp; in,
    vector<pair<size_t, myiter>> const&amp; 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;
}

Values = sort_from_ref(Values, order);
登录后复制

此函数采用原始向量和包含排序索引的参考向量,并返回相应排序的副本。

以上是如何根据另一个'std::vector”的顺序对一个'std::vector”进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

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