はじめに
複数を同時にソートするタスク要素間の対応を維持しながらベクトルを変換することは、プログラミングにおける一般的な課題です。この記事では、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 サイトの他の関連記事を参照してください。