考虑这样一种情况,您有多个相同长度的向量,并且需要对其中一个向量进行排序,同时保持相同的长度所有其他向量的排序顺序。当排序值用作其他向量中元素的引用时,这可能很有用。
在提供的代码片段中,我们有两个向量:索引和值。 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中文网其他相关文章!