• ベストアンサー

STL MAPのキー

3種類のキーを持ったデータの検索をしたいのですが、 mapで実現する場合、どんな方法があるのでしょうか キー int A、キー int B、キー string C、VOL=クラスX 検索はA,B,Cでそれぞれ行うとした場合、以下のようなmapのtypedefを3種類設定することになるのでしょうか? map<int, クラスX> aa; map<int, クラスX> bb; map<string, クラスX> cc; これですと削除がする場合には3箇所mapを修正するひつようがありますので1箇所で処理でしないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

3つのmapをまとめてクラスにしてしまい、メソッドを用いて処理を一元化する方法もあると思います。 要素の数が少ないなら、listなどにいれてfind_ifで関数をかえて検索。 boostにはmulti_index_containerなるものもあるようです。

参考URL:
http://hw001.gate01.com/eggplant/tcf/cpp/boost_multi_index_container.html
ritomo
質問者

お礼

ありがとうございます。やはり3種類のmapを使うのですね。 参考になりました

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • ddnp009
  • ベストアンサー率25% (15/58)
回答No.2

>3種類のキーを持ったデータ ??? それは3種類のmapが(各個独立して)存在するということ? よく意味が理解できないけれども、 "A, B それと Cでキーを成す"ということならば、 ↓のようにできる。 struct KeyType {  int A;  int B;  std::string C;  bool operator<(const KeyType& rhs) const; }; class X; typedef std::map<KeyType, X> Hoge;

ritomo
質問者

お礼

回答ありがとうございます。 A,B,Cを合成したものをキーにするものではなく、 A、B,Cのいずれかで検索するという意味でした。

すると、全ての回答が全文表示されます。

関連するQ&A