逆引きも可能な連想コンテナ

[戻る]
sakata 2009/05/04(月) 15:41:44
VC++で開発している者です。

std::map<A,B> とかだと

A型の値から B型の値を得られますが

B型の値から A型の値を得る事も出来るような
逆引きも可能な連想コンテナ
で定番どころとかってありますでしょうか?

map<A,B>とmap<B,A>をメンバに持つクラスを作れば
自作は難しくはないのですが、
有名どころがあればそっちを使いたいなと……

ご教授願います。

επιστημη [E-Mail] [HomePage] 2009/05/04(月) 22:11:10
僕なら単に vector<pair<A,B>> 使うな。

Ban 2009/05/04(月) 23:11:06
cppllに昔こんなスレがありますね。
> http://ml.tietew.jp/cppll/cppll/article/62

本当に両引きしたいなら私も自作するかもしれませんが、
今のところ必要になったことがない気がします。
(大抵は(lambdaとか組み合わせて)検索できれば十分>逆引き)

少なくとも私は「これ」ってのを知りません。

# Javaなら、Apache.CommonsのCollectionsに、DoubleOrderedMapってのがあります。

bun 2009/05/06(水) 10:23:24
仮に自作するとして、
A → B は 1対1ですが、 B → A は1対多です。
そこのところはOK?

sakata 2009/05/06(水) 13:32:09
ご回答ありがとうございます。

> A → B は 1対1ですが、 B → A は1対多です。
> そこのところはOK?

むしろ1対1である事を保障するために
コンテナへ格納時にチェックをしたいと言う感じです。

で、チェックしようとすると逆引き検索をかける羽目になるので
要素数が多くなってくると、
逆引きにもある程度の速度が欲しいなと……。

標準的なものが無いのは
要求されるメモリと速度の効率のバランスによって
実装法が無数に発生するためといった所ですか……。

意図したライブラリが見つからない時
それが勉強不足のせいなのか
本当にないのかの見切りが難しいです。

tetrapod 2009/05/06(水) 16:16:07
なんでもいいけどデータベースに一意性制約をつけた項目を作成し
登録後に引くだけ、ってのが簡単かもしんまい
件数が何件なのかわからないけど、何十万件とか何百万件とかあったら
パフォーマンスもデーターベース使ったほうがよさそうな希ガス

Ban 2009/05/09(土) 23:10:31
使ったことなくて意識してませんでしたが(1.35かららしい…スルーしてました)、
boostにもそれっぽいの、いますね。こんなのですか?

http://www.boost.org/doc/libs/1_39_0/libs/bimap/doc/html/index.html

# チェックのためだけなら、そもそもチューニングしないかDB案の方がいい可能性も。

古いスレッドには追加発言できません。