STLでは、マップまたはベクトルの方が優れています。削除する必要のあるレコードのセットがあるとすると、何を優先する必要がありますか-std::mapまたはstd::vector。なんで?
質問する
73 次
2 に答える
2
キーと値のペアのようなものがなく、持っている値だけがない場合は、Map の代わりに Set を使用することを検討する必要があります。ベクトルの使用について話しているので、これを想定しています
于 2012-10-20T08:35:12.733 に答える
0
多くのレコードを予測できない順序で追加および削除する必要がある場合は、マップまたはセットの方がパフォーマンスが向上する可能性があります。これは、エントリの削除にはマップまたはセットのサイズに比例する対数時間しかかからないのに対し、ベクトルからのエントリの削除にはベクトルのサイズに比例する時間がかかるためです。unordered_map / unordered_set の方が良いかもしれません - レコードを削除するコストは通常一定です。
背景の場合:
- vector は配列であるため、1 つの要素を削除すると、他のすべての要素を 1 つ左に移動する必要があります。
- マップとセットは赤黒木です ( http://en.wikipedia.org/wiki/Red-black_tree )
- unordered_map と unordered_set はハッシュ テーブル ( http://en.wikipedia.org/wiki/Hash_table )です。
于 2012-10-20T08:27:37.307 に答える