順序を保持した重複削除の STL アルゴリズム
ソートされていない整数の配列が与えられた場合、タスクは挿入を保持しながら重複要素を削除することです各整数が最初に出現する順序。セットを使用した単純なアプローチでもこれを実現できますが、STL アルゴリズムを活用した最適化されたソリューションは、より効率的で洗練されたソリューションを提供します。
STL アルゴリズムベースのアプローチ
STL は、コンテナの効率的な操作を容易にするいくつかのアルゴリズム。そのようなアルゴリズムの 1 つが std::copy_if です。このアルゴリズムを利用すると、元の順序を維持しながら、一意の要素を含む新しいベクトルを作成できます。
このソリューションを実装するには、以前に検出された要素を追跡し、要素が既に存在する場合に false を返す述語関数を定義します。加工された。これにより、一意の要素のみが新しいベクターにコピーされるようになります。
実装
C 11 以降では、以下を実装するオーバーロードされた Operator() を使用して関数オブジェクトを定義します。述語:
template <typename T> struct NotDuplicate { bool operator()(const T& element) { return s_.insert(element).second; // true if element is unique } private: std::set<T> s_; };
この述語を元のベクトルとターゲット ベクトルとともに std::copy_if に渡します:
std::vector<int> uniqueNumbers; NotDuplicate<int> pred; std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(uniqueNumbers), std::ref(pred));
C 11 サポートが利用できない場合は、std::remove_copy_if を使用します。
結論
このアプローチは、望ましい順序付け要件を確実に遵守しながらコンテナを効率的に操作するための STL アルゴリズムの有効性を示しています。 。 std::copy_if アルゴリズムを利用すると、一意の要素の挿入順序を維持しながら、ソートされていないベクトルから重複を削除できます。
以上がSTL アルゴリズムを使用して挿入順序を維持しながら、ソートされていない配列から重複を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。