3

ルックアップ用のテーブル データ構造をどのように設計しますか?

私は基本的に次の表を表す必要があります

Country             Activity        Legal_Age
European            Drink           18
European            Drive           21
American            Drink           21
American            Drive           18

ここで、キーは (Country & Activity) で、値は Legal_age です。

次のように std::map を使用して、この問題を (個々のマップに) 分解することを考えました。

national_Activity_age_map

European            European_Activity_age_map
American            American_Activity_age_map

European_Activity_age_map

Drink           18
Drive           21

American_Activity_age_map

Drink           21
Drive           18

しかし、ここでの問題は、元のテーブルへの列の数が増え続けるにつれて、追加および維持されるマップの数が増え続けることです。

米国が、米国市民と非市民の飲酒年齢を別々にすることを選択したとしましょう。次に、新しいマッピングを追加し、既存のマッピングも変更する必要があります。

複数の因数分解されたキーを取り、1 つの値を生成する DataStructure でこのデータを表すシンプルでクリーンな方法はありますか?

以下のようないくつかの同様の質問がありますが、私の特定の問題には何も答えません。 この形式のデータを表現するには、どのデータ構造を使用しますか?

更新: 移植する必要があるため (またはそのようなもの)、Boost 機能を職場で使用することはできません。使用できる C++ (gcc 4.1.2) 機能はありますか?

4

1 に答える 1

8

Boost Multi-Index を試してみてください。

Boost Multi-index Containers Library は、multi_index_container という名前のクラス テンプレートを提供します。これにより、異なる並べ替えとアクセス セマンティクスを持つ 1 つ以上のインデックスを維持するコンテナーの構築が可能になります。インデックスは、STL コンテナーのインターフェイスと同様のインターフェイスを提供するため、使い慣れたものになります。要素の同じコレクションに対する複数インデックスの概念は、リレーショナル データベースの用語から借用され、単純なセットとマップでは不十分な、複数インデックスのリレーショナル テーブルの精神で複雑なデータ構造の指定を可能にします。

于 2013-01-10T02:21:44.427 に答える