ホームページ >バックエンド開発 >C++ >C で大きなベクトルを効率的に重複排除およびソートするにはどうすればよいですか?

C で大きなベクトルを効率的に重複排除およびソートするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-31 19:00:12842ブラウズ

How Can I Efficiently Deduplicate and Sort a Large Vector in C  ?

ベクトルの重複排除と並べ替えの最適化

重複の削除と大きなベクトルの並べ替えは、プログラミングにおいて重要なタスクとなる場合があります。さまざまなアプローチを検討し、このプロセスで効率を達成する方法を探ってみましょう。

1.並べ替えと一意の組み合わせ:

提供されたコード スニペットは、std::erase と std::sort を使用して重複を消去し、ベクトルを並べ替えようとします。ただし、std::unique にはソートされた入力イテレータが必要なため、これは機能しません。

これを修正するには、まずベクトルをソートしてから、std::unique を適用して重複を削除します。

std::sort(vec.begin(), vec.end());
vec.erase(std::unique(vec.begin(), vec.end()), vec.end());

2.最初に重複を消去するか、最初に並べ替えを行う:

std::unique アルゴリズムの時間計算量は O(n) (n は入力ベクトルのサイズ。ただし、ベクトルがソートされた状態を維持するには、重複を削除した後にソートする必要があります。

3. Set の使用:

リンクされた回答で述べたように、std::set を使用すると、重複が大きい​​大きなベクトルをより効率的に処理できます。セットは要素を挿入するときに重複を自動的に削除します。ベクトルをセットに変換し、要素を挿入してからベクトルに戻すことができるため、重複排除と並べ替えを 1 つのステップで実現できます。

パフォーマンスの比較:

さまざまなアプローチ (一意のソートによるベクトル、手動セット変換、およびセットコンストラクター変換) のベンチマークを行うと、重複の数が大きい場合、セットしてデータをベクトルに戻すことは、ベクトルベースの手法を使用するよりも驚くほど高速です。

結論として、重複が多い大きなベクトルの場合、セットを使用することが重複を消去して並べ替える最も効率的な方法となります。さらに、手動のセット変換は、セット コンストラクターを使用するよりも高速になる傾向があります。

以上がC で大きなベクトルを効率的に重複排除およびソートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。