根据不同向量的值对向量进行排序
考虑这样一个场景,您有多个长度相同的向量,并且您想要按指定顺序对一个向量进行排序,同时对其他向量应用相同的排列。这就提出了如何在多个向量中利用这种排序模式的挑战。
解决方案
要按来自不同向量的值对向量进行排序,您可以使用自定义排序器并使用一个向量,将每个元素的索引与其在排序向量中的相应值配对。
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; }
通过应用此过程,您可以有效地对目标向量进行排序,并将相同的转换应用于其他向量中的相应元素。
以上是如何根据单个向量的值对多个向量进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!