ホームページ > バックエンド開発 > C++ > C で対応関係を維持しながら複数のベクトルを同時に効率的にソートするにはどうすればよいですか?

C で対応関係を維持しながら複数のベクトルを同時に効率的にソートするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-05 07:59:12
オリジナル
948 人が閲覧しました

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

Boost または STL を使用した C での ZIP (ロックされた) コンテナーのソート

はじめに

複数を同時にソートするタスク要素間の対応を維持しながらベクトルを変換することは、プログラミングにおける一般的な課題です。この記事では、Boost ライブラリまたは標準テンプレート ライブラリ (STL) を使用したこの問題の解決策を検討します。

標準アプローチ

標準アプローチには、ベクトルをタプルや構造体などの複合データ構造に変換します。ただし、このアプローチではデータのコピーが必要となり、非効率になる可能性があります。

Boost ソリューション

Boost は、boost::zip_iterator と boost::zip_range を提供します。複数のコンテナを並行して走査するイテレータの作成。ただし、これらの反復子は読み取り専用でランダム アクセスではないため、標準の並べ替えアルゴリズムでの使用が制限されます。

Range-v3 ソリューション

1 つの解決策は、 range-v3 ライブラリ。 view::zip 関数は、複数のコンテナを並行して反復するビューを作成します。このビューでは、 ranges::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;
}
ログイン後にコピー

このコードは、要素の対応関係を維持しながら 2 つのベクトルを同時に並べ替える方法を示しています。ソートされた結果はコンソールに出力されます。

将来の考慮事項

このアプローチはシーケンスに対してはうまく機能しますが、リストなどの他のコンテナー タイプをサポートするように拡張するには、次のことが必要です。双方向およびランダムアクセス反復子。現在、STL の std::sort 関数は双方向反復子をサポートしていません。

以上がC で対応関係を維持しながら複数のベクトルを同時に効率的にソートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート