2012-03-26 4 views
0

テーブルが行と列でアクセスされていますが、これらの2つは不可分です。しかし、彼らはユニークであり、同じセットから取られます。テーブルを展開する必要がありますが、常に最後から展開してください。途中から除去が必要な場合がありますが、優先事項ではありません。正方形テーブルと対称テーブルのデータ型

map<Key, int> headers; 
vector<vector<Value> > table; 

または::

map<Key, map<Key, Value> > table; 

より適切であることを行っている

私は現在2つのアプローチをテストするのですか?私は新しい提案にもオープンしています。

基本的な使用法を示す例(どちらも非常に簡略化されていますが)はherehereです。それはすべて、この構造が使用されようとしている方法によって異なり

答えて

1

:テーブルにはなりますどのように人口が密集し、様々な操作が持っているどのように効率的に、ペイロードタイプ(Value)は、などとなりますどのように大きな

最初のアプローチ(ベクトルのベクトル、インデックスを変換するマップ付き)は濃密な表現です:すべての値は明示的にテーブルに格納されます。ベクトルがLの倍数だけ成長すると、データ本体の総割当超過はL^2まで上がる可能性があります。たとえば、L == 1.25の場合、ストレージが50%超過する可能性があります。 sizeof(Value)が大きい場合、またはテーブルが大きい場合は禁止されている可能性があります。また、テーブルを拡張すると、(ベクトルを再割り当てする必要がある場合)非常に高価になることがあります。

2番目のアプローチ(マップのマップ)は、潜在的に疎です。ただし、すべてのテーブル(行、列)のペアにアクセスすると、密度が高くなります。また、地図のブック情報はベクトルの場合よりも少し大きい。小さいValueのサイズのために、ベクトルアプローチのベクトルはより空間効率が良いかもしれません。ほとんどのテーブルに "デフォルト"の値が設定されている場合は、テーブルへの読み書きアクセスを区別して改善することができます。値の読み込みは「検索」を実行し、発見された。

関連する問題