考慮這樣一種情況,您有多個相同長度的向量,並且需要對其中一個向量進行排序,同時保持相同的長度所有其他向量的排序順序。當排序值用作其他向量中元素的參考時,這可能很有用。
在提供的程式碼片段中,我們有兩個向量:索引和值。 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中文網其他相關文章!