簡介
同時排序多個容器的任務向量同時保持其元素間的對應關係是程式設計中的常見挑戰。本文探討了使用 Boost 函式庫或標準範本庫 (STL) 解決此問題的方法。
標準方法
標準方法包括從向量轉換為複合資料結構,例如元組或結構。然而,這種方法需要複製數據,效率較低。
Boost 解決方案
Boost 提供了 boost::zip_iterator 和 boost::zip_range 來啟用建立並行遍歷多個容器的迭代器。然而,這些迭代器是唯讀的,不是隨機存取的,這限制了它們在標準排序演算法中的使用。
Range-v3 解
一個解法是使用range-v3 函式庫。 view::zip 函數會建立一個並行迭代多個容器的視圖。此視圖允許使用 range::sort 函數進行排序。
#include <range/v3/all.hpp> #include <iostream> int main() { std::vector<int> v1 = {15, 7, 3, 5}; std::vector<int> v2 = {1, 2, 6, 21}; ranges::sort(ranges::view::zip(v1, v2), std::less<>{}, &std::pair<int, int>::first); std::cout << ranges::view::all(v1) << '\n'; std::cout << ranges::view::all(v2) << '\n'; return 0; }
此程式碼示範如何同時對兩個向量進行排序,同時保持元素對應關係。排序結果將列印到控制台。
未來注意事項
雖然這種方法適用於序列,但將其擴展為支援其他容器類型(例如列表)需要雙向和隨機存取迭代器。目前,STL 的 std::sort 函數不支援雙向迭代器。
以上是如何在 C 中同時有效地對多個向量進行排序,同時保留對應?的詳細內容。更多資訊請關注PHP中文網其他相關文章!