未ソートのベクトルから重複を削除: 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 サイトの他の関連記事を参照してください。