VC++で開発している者です。
std::map<A,B> とかだと
A型の値から B型の値を得られますが
B型の値から A型の値を得る事も出来るような
逆引きも可能な連想コンテナ
で定番どころとかってありますでしょうか?
map<A,B>とmap<B,A>をメンバに持つクラスを作れば
自作は難しくはないのですが、
有名どころがあればそっちを使いたいなと……
ご教授願います。
僕なら単に vector<pair<A,B>> 使うな。
cppllに昔こんなスレがありますね。
> http://ml.tietew.jp/cppll/cppll/article/62
本当に両引きしたいなら私も自作するかもしれませんが、
今のところ必要になったことがない気がします。
(大抵は(lambdaとか組み合わせて)検索できれば十分>逆引き)
少なくとも私は「これ」ってのを知りません。
# Javaなら、Apache.CommonsのCollectionsに、DoubleOrderedMapってのがあります。
仮に自作するとして、
A → B は 1対1ですが、 B → A は1対多です。
そこのところはOK?
ご回答ありがとうございます。
> A → B は 1対1ですが、 B → A は1対多です。
> そこのところはOK?
むしろ1対1である事を保障するために
コンテナへ格納時にチェックをしたいと言う感じです。
で、チェックしようとすると逆引き検索をかける羽目になるので
要素数が多くなってくると、
逆引きにもある程度の速度が欲しいなと……。
標準的なものが無いのは
要求されるメモリと速度の効率のバランスによって
実装法が無数に発生するためといった所ですか……。
意図したライブラリが見つからない時
それが勉強不足のせいなのか
本当にないのかの見切りが難しいです。
なんでもいいけどデータベースに一意性制約をつけた項目を作成し
登録後に引くだけ、ってのが簡単かもしんまい
件数が何件なのかわからないけど、何十万件とか何百万件とかあったら
パフォーマンスもデーターベース使ったほうがよさそうな希ガス
使ったことなくて意識してませんでしたが(1.35かららしい…スルーしてました)、
boostにもそれっぽいの、いますね。こんなのですか?
http://www.boost.org/doc/libs/1_39_0/libs/bimap/doc/html/index.html
# チェックのためだけなら、そもそもチューニングしないかDB案の方がいい可能性も。