2012-03-18 7 views
0

私はC++の初心者です。私はルックアップと新しいエントリの追加の面で非常に良いパフォーマンスを与えるアドレスのリストを格納する必要があります。1列のデータ構造アドレスを格納するためのリスト、より良いルックアップC++のO(1)

私は最初にアドレスに既に存在するかどうかを確認したい場合ははい、次に書き込みしない場合はそのリストに新しいエントリを追加します。

特定の操作時に、アドレスがリストに存在するかどうかを調べます。

C++のメモリと領域に関する高速アクセスと動的拡張データ構造はありますか。

+2

ハッシュテーブル?... –

+0

新しい[C++ 11の順序付けられていない型](http://en.cppreference.com/w/cpp/container/unordered_set)が役立つかもしれません。それらは木ではなくstd :: set、std :: mapとほとんど同じですが、ハッシュテーブルを使います。古いバージョンの標準で必要な場合は、[Boost.Unordered](http://www.boost.org/doc/libs/1_49_0/doc/html/unordered.html)にあり、新しい基準には何がありますか? – 01100110

答えて

1

対数複雑さを持つstd::map(通常は、いくつかはred-black treeとして実装されています)を使用することをお勧めしますので、実際には十分であるはずです。

C++ 11標準に準拠した実装をお持ちの場合は、として実装されているstd::unordered_mapと考えることができます。あなたがキーに関連するデータを必要としませんが、ちょうどそれらのセットを処理する場合

は、considuer std::setまたは

そして、多くのライブラリ(ブースト、Qtの、...)std::unordered_setも連想コンテナを実装します。

+0

C++ 03で 'boost :: unordered_map'を使うことができます。 –

+0

しかし、Boostは広く普及していても標準ではありません。一部の人はそれを避けたいかもしれません。 –

+2

ブーストを避けることは愚かで逆効果です。 'std :: unordered_map'はBoostからかなり解放されており、Boost実装はおそらくかなり独立しており、誰かが完全なBoostパッケージに依存していなければプロジェクトにコピーすることができます。 –

関連する問題