2011-10-26 21 views
-1

メモリにデータを格納するために文字列のベクトルを使用しています。データベースはオプションではありません。より正確には、文字列のベクトルの配列。シンプルなシナリオ:256都市に住む人々の名前を格納する必要があります。私は新しい要件は、新しい "クラスPerson" を作成するようになりました大量のデータをC++で大量に保存する方法

vector<std::string> city[256]; 

を使用した項目ごとに、より多くのデータを保持します

例この要件のため

NewYork: John, Bod, ... 
London: Jim, Bill... 

class person { 
string name; 
string surname; 
string email; 
int age; 
}; 

私は、これらのデータを保存して共有する最適な方法を見つけるために、この問題に取り組んでいます。

vector<class person> city[256]; 

明らかにオブジェクトへのポインタを使用する方が良いです。 shared_ptrはここに適用されますか? TR1 がシステムにインストールされていますが、私たちは追加ライブラリを使用することはできません。

+2

「私は256都市の姓を格納する必要があります」: '姓と名字を持つ都市の例を挙げてください。 –

+2

実際には256の都市が「大量のデータ」ですか? – xanatos

+1

@ AlfP.Steinbach:ニューヨーク? ;) –

答えて

0

あなたがC++ 11を持っており、このデータだけの単一のグローバルバージョンが必要な場合は、このようなデータ構造を使用することができますに:

#include <unordered_map> 
#include <unordered_set> 
#include <string> 

typedef std::unordered_multiset<std::string> name_set; 
typedef std::unordered_map<std::string, name_set> city_map; 

city_map city_db { 
    { "Moscow", { "Ivan", "Igor", "Vladimir" } }, 
    { "Madrid", { "Julio", "Pedro", "Sanchez" } }, 
    { "Munich", { "Sepp", "Huber", "Maier" } } 
}; 

int main() 
{ 
    return city_db["Munich"].size(); // just as an example 
} 
1

都市、人..データベースと考える時間。

+0

DBはオプションではありません。私は私の質問を更新しました。これらのデータがプロセスメモリに必要です。 – cateof

+0

@cateo:データベース用に外部サーバーを用意する必要はありません。純粋なインプロセスデータベースも存在します。 –

0

またはベクトルのベクトルを使用しますか?またはベクトルのリスト?

0

shared_ptrまたはネイティブポインタを使用するか、値として格納できます。場合によります。最速のルックアップが欲しいですか?メモリに保存しますか?データを連続したメモリに保存しますか?スレッドをサポートしますか?一般的な正解はありません。 256個のオブジェクトは大量のデータではありません。

+0

私の質問が更新されました。私は256のベクトルが必要です。各ベクトルは成長することができます... DBはオプションではなく、スレッドを使用します。 – cateof

0

ポインタが優れていることは明らかです。はい、コレクションにshared_ptrを保存することはできますが、データにアクセスする方法によっては、代わりにlistまたはmapを使用することもできます。

関連する問題