首頁 > 後端開發 > C++ > 如何在 C 中同時有效地對多個向量進行排序,同時保留對應?

如何在 C 中同時有效地對多個向量進行排序,同時保留對應?

Susan Sarandon
發布: 2024-12-05 07:59:12
原創
950 人瀏覽過

How to Efficiently Sort Multiple Vectors Simultaneously in C   While Preserving Correspondence?

使用Boost 或STL 對C 語言中的壓縮(鎖定)容器進行排序

簡介

同時排序多個容器的任務向量同時保持其元素間的對應關係是程式設計中的常見挑戰。本文探討了使用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板