根据不同 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& a, pair<size_t, myiter> const& 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; } Values = sort_from_ref(Values, order);
此函数采用原始向量和包含排序索引的参考向量,并返回相应排序的副本。
以上是如何根据另一个'std::vector”的顺序对一个'std::vector”进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!