2010-12-08 9 views
0

私は連想コンテナを使用したい状況があります。このコンテナを使用して数百万以上のデータを保持することが完全に可能であるため、std :: unordered_mapを使用することを選択しました。要素。しかし、今私は順番に反復する必要があります。私は値の型をリスト内で互いにリンクさせることを検討しましたが、今はメモリ管理に問題があります。C++でのアソシエートと反復

コンテナを変更する必要がありますか?std :: map?または、unordered_mapを一度反復してベクトルに挿入し、ソートしてから繰り返しますか?私は繰り返し順序付けされた方法で反復する必要はほとんどありません。

+0

「私は繰り返し順序付けされた方法で繰り返し処理する必要はありません。」 - あなたが 'unordered_map'を選んだときに、あなたが全く反復する必要はないと思いましたか?私は 'map'は利用可能な最もシンプルなオプションであるため、最適化を測定するベースライン(' unordered_map'と別の並べ替えや並べ替えなど)を指定します。 –

+0

@スティーブ:最初の段階では必要ではないので、私はしなければならないことを知っていたが、忘れてしまった。 – Puppy

+0

確かに私の鍵の 'ハッシュ'関数を書くのに苦労したら、 'unordered_map'をつけることにも熱心になるでしょう:-) –

答えて

2

あなたは、あなたが選んだ2つの選択肢のさまざまな操作のO()を知っています。それに基づいて選択し、パフォーマンスが必要な場所とそのために最適なコンテナに基づいてコスト/利益分析を実行する必要があります。

もちろん、私はあなたのためにその分析を行うのに十分な知りはありませんでした。

2

同じ基本オブジェクトコレクション上で順序付けられていないインデックス(順序付けられた)インデックスを指定してBoost.MultiIndexを使用できます。

これは可能な問題です。既存の結合コンテナモデルからの自然なマッピングはなく、常に2番目のインデックスを必要としない場合は、過剰な可能性があります。