ホームページ > バックエンド開発 > C++ > 順序を維持しながらソートされていないベクトルから重複を削除するにはどうすればよいですか?

順序を維持しながらソートされていないベクトルから重複を削除するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-13 05:59:02
オリジナル
407 人が閲覧しました

How to Remove Duplicates from an Unsorted Vector while Maintaining Order?

未ソートのベクトルから重複を削除

未ソートのベクトルから重複を除去しながら、最初に出現した順序を維持することは、さまざまな状況で重要です。セットと手動反復を利用する単純なアプローチは効果的ですが、STL アルゴリズムを活用することで改善できます。

これを実現するには、std::copy_if アルゴリズムが便利なソリューションを提供します。すでに処理された要素を追跡し、重複に対して false を返す述語を定義することで、必要な要素を除外できます。

C 11 サポートが利用できない場合は、ぎこちない名前の std::remove_copy_if を使用できます。その論理は逆転した。以下に、テストされていない例を示します。

template <typename T>
struct NotDuplicate {
  bool operator()(const T& element) {
    return s_.insert(element).second; // true if s_.insert(element);
  }
 private:
  std::set<T> s_;
};
ログイン後にコピー

次に、次のコードを使用できます。

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

このソリューションでは、std::ref により、ステートフル ファンクターがアルゴリズム内で内部的にコピーされます。ただし、 std::copy_if は、適用されたファンクターの副作用に関する要件を課しません。

以上が順序を維持しながらソートされていないベクトルから重複を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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