STL アルゴリズムは、ソートされていないベクトルから重複を削除するのにどのように役立ちますか?

DDD
リリース: 2024-11-12 10:39:02
オリジナル
264 人が閲覧しました

How do STL Algorithms Help Remove Duplicates from an Unsorted Vector?

未ソートのベクトルから重複を削除: STL アルゴリズムの散歩

未ソートのベクトルから重複要素を取り除くというタスクに直面したとき最初の順序を維持しながら、反復的なアプローチに着手したくなりますが、不要なエントリを面倒に追跡して削除します。しかし、ちょっと待ってください。STL アルゴリズムで舗装された道という、より良い方法があります。

重複削除のための STL ラダー

STL は、std を含む強力なアルゴリズムを誇ります。 ::copy_if は、そのようなシナリオ向けに細心の注意を払って設計されています。この魔法の薬は、反復可能なソース (ベクトルなど)、宛先 (重複を消したい場所)、選択プロセスをガイドする述語を必要とします。

重複検出器の作成

std::copy_if の優れた機能を解き放つ鍵は、次のようなカスタム述語を作成することにあります。重複を嗅ぎ分けます。ここでは、NotDuplicate を紹介します。これは、要素をセットに積極的に挿入し、「セットにはすべてを保持できない」という神聖な原則を採用する関数オブジェクトです。要素が以前に検出された場合は、正常に false を返します。

アルゴリズムの Swift Swipe

信頼できる NotDuplicate 述語を使用して、std::copy_if を呼び出して、私たちのベクトルをエレガントに横断します。各要素は NotDuplicate に提示され、NotDuplicate は確認された要素のセットを参照し、真の新規参入者のみに通過を許可します。ユニークな生存者は目的のコンテナに滑り込み、複製はデジタル空間で消滅します。

コードの恵みを覗いてみましょう

私たちの舞台裏を覗いてみましょうエレガントなソリューション:

std::vector<int> uniqueNumbers;
NotDuplicate<int> pred;
std::copy_if(numbers.begin(), numbers.end(),
             std::back_inserter(uniqueNumbers),
             std::ref(pred));
ログイン後にコピー

この純粋なコード スニペットは、NotDuplicate を呼び出します。 std::copy_if を支援し、ベクターを素早く選別し、重複のない新しいタペストリーを織ります。

C 11 の抱擁で

甘いものに恵まれたらC 11 を採用すると、ラムダの魅惑的なパワーを解き放ち、あなたの体を飾ることができます。簡潔でエレガントなコード:

std::vector<int> uniqueNumbers;
std::copy_if(numbers.begin(), numbers.end(),
             std::back_inserter(uniqueNumbers),
             [](const int& element) {
                return s_.insert(element).second; // true if s_.insert(element);
             });
ログイン後にコピー

要点: アルゴリズム、あなたの心強い味方

STL アルゴリズムの目的は、あなたを変身させることではないことを覚えておいてください。アルゴリズム ウィザードですが、プログラミングの能力を強化するためのものです。豊富な機能を活用すれば、コードの可能性を最大限に簡単かつ効率的に解き放つことができるでしょう。

以上がSTL アルゴリズムは、ソートされていないベクトルから重複を削除するのにどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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