2016-04-21 15 views
0

C++でのプログラミングは比較的新しいので、ID番号と文字列の2つの値だけを持つデータセットを作成しようとしています。これらは約10万組あります。私は、自分のニーズに最も適したデータ構造が何であるか分かりません。大容量データセットの保存と検索

データセットは、次の要件があります

000000と999999の間のすべてのID値が

を使用する-not列に対応する-the ID番号が6桁(999999にそう000000)

あります

-theユーザーがデータを変更する許可が-Iが 文字列にIDや単語で検索すると、ユーザーIDに戻りたいと文字列

を設定する必要はありません検索の

-speedだから基本的に私は、私は、このデータセットを構築し、それを迅速に検索する(ベクトル、リスト、配列、SQLデータベースなど)を使用すべきか思ったんだけど

重要なのですか?

答えて

1

列に対応するID番号が

グッド6桁(SO 000000 999999 に)、int、またはより正確に使用されint32_t IDの場合

-すべてのID値の間000000と999999は-the、ユーザがデータを変更する権限を持っていません

問題ありません...

を使用されるクラス内のデータをカプセル化

を設定しますいいですか?

- 文字列内のIDまたは単語で検索し、ユーザーIDと文字列に戻したい場合は

グッド

、検索のBoost.Bimap

-speedを使用することは

あなたはまたしてもよい:-) ...あなたがC++を使用している理由です、私が知っている

重要ですSQLiteを確認したい:SQLiteは、インメモリデータベースとしても機能することができます。

0

使用のstd ::マップ

void main() 
{ 
    std::map<string /*id*/, string> m; 
    m["000000"] = "any string you want"; 
} 
+0

OPは、idと文字列の両方を検索する必要があります。キーによる検索のみをマップします。 – NathanOliver

-1

あなたにはいくつかのオプションがあります。

  1. データベース、MySQL、SQLiteなどを使用します。パフォーマンスは使用するデータベースによって異なります。

  2. また、C++コードで実行する場合は、ベクターを使用できます。キーの1つのベクトル、もう1つは文字列のベクトルです。また、関連するインデックスを2つのベクトルの間にマッピングする必要があります。

新しい項目を追加した後、両方のベクターを並べ替えます。関連するインデックスのマップを更新することを忘れないでください

次に、バイナリ検索を使用してキーまたは値を見つけます。それは十分速くなければならない。

+0

標準的なデータ構造がはるかに優れています。 –

+0

@RobK名前はいくつかお願いします。 –

+0

std :: unordered_map –

0

ベクター&リストは、ソートしないと使い方が悪いですが、ループスルーはしたくありません。 私はあなたがマップを使用することをお勧めします、全体の地図を構築するにも時間がかかるかもしれません(nlogn)。私はまだそれを検索するためのランタイムはログ(n)はかなり高速ですので、それをお勧めします!

「検索の速度が重要である」

0

私はあなたのID /文字列のペアのベクトルを含むクラス、それにイテレータまたは参照にIDをマップunordered_mapのようなものをお勧めしたいですvector、および文字列をイテレータまたはそのベクトルへの参照にマップするunordered_mapです。次に、idまたは文字列に基づいてid/stringペアを検索するクラス内の2つの検索関数。

+0

重複文字列はどうですか?マップキーは一意でなければなりません。 –

+0

std :: unordered_multimap –

関連する問題