ホームページ >バックエンド開発 >C++ >重複を削除して C ベクトルを並べ替える最も効率的な方法は何ですか?

重複を削除して C ベクトルを並べ替える最も効率的な方法は何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-26 03:39:09968ブラウズ

What's the Most Efficient Method for Removing Duplicates and Sorting a C   Vector?

重複を消去してベクトルを並べ替える最も効率的な方法

重複を効率的に消去して C ベクトルを並べ替えるには、並べ替えと次に std::unique 関数を使用します。ただし、指定したコードには潜在的な欠陥があります。独自の関数が要素の順序を変更するため、並べ替え順序が崩れる可能性があります。

さらに、操作の順序はパフォーマンスに影響を与える可能性があります。ベクターに多くの重複が含まれている場合は、(一意を使用して) 最初に重複を削除する方が効率的である可能性があります。ただし、重複が均等に分散されている場合は、最初にソートする方が速い可能性があります。

より効率的な代替方法は、set コンストラクターを使用してベクトルを std::set に変換することです:

set<int> s(vec.begin(), vec.end());
vec.assign(s.begin(), s.end());

このアプローチでは、セットの自然な特性を利用するため、一意性と正しい並べ替えが保証されます。提供されたベンチマークが示すように、重複の数が十分に大きい場合、セットに変換して元に戻す方が、ベクトルを直接操作するよりも高速です。

最後に、手動でセットに変換することは注目に値します (例: set<) ;int> s; for (unsigned i = 0; i

以上が重複を削除して C ベクトルを並べ替える最も効率的な方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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