2011-11-14 16 views
0

どちらが高速であるかを知りたい ハッシュテーブルまたはベクトル。ハッシュテーブルまたはベクトルに情報を保存する

内部のすべての情報をループして現在のデータと比較したい場合は、 既に内部にある場合は、ループを解除したいと思います。

例:

Iいる[{1,2}、{1,2,3}]と私の現在の新しいデータがループの内側{1,2}(それは私のベクターまたは私のハッシュの内部にありますテーブル)、私は私のループを壊すので、もし私が{2,1}私はそれも壊れます。

もし私がそうでなければ私は私のループを続ける秩序にかかわらずすべての要素が一致する。そして、ハッシュテーブルがはるかに高速であれば、私はそれを実装する方法についてヒントを得ることができますか?

+0

スマートフォンから質問を投稿しましたか?句読点は読みにくいものではありません。 – minjang

+0

申し訳ありませんが、私はもう一度書き直そうとしました。より良いことを望みます。 – mona

+0

ベクターとハッシュテーブルは唯一の選択肢ですか? –

答えて

0

Hashtableはキー値のペアを作成できるように機能します。唯一の条件は、キーが同じ場合に複数の組み合わせを持つべきではないということです。キーがユニークなので、テーブルに3,1と3,2を持つことはできません。

lhsに重複がある場合は、ベクターを使用するのが最適です。

0

ネストされたセット、つまりstd::set<std::set<int> >を使用します。

#include <set> 
#include <cassert> 

typedef std::set<int> Entry; 
typedef std::set<Entry> Table; 

int main() { 
    int e1[] = {1,2}; 
    int e2[] = {1,2,3}; 
    int e3[] = {2,1}; 
    int e4[] = {3,2}; 

    Table t; 
    t.insert(Entry(e1, e1+2)); 
    t.insert(Entry(e2, e2+3)); 

    Table::iterator it; 
    Table::iterator end = t.end();; 

    // Search for 1,2 
    it = t.find(Entry(e1, e1+2)); 
    // Should find it 
    assert(it != end); 

    // Search for 2,1 
    it = t.find(Entry(e3, e3+2)); 
    // Should find it 
    assert(it != end); 

    // Search for 3,2 
    it = t.find(Entry(e4, e4+2)); 
    // Should NOT find it 
    assert(it == end); 
} 
関連する問題