逆引きも可能な連想コンテナ – プログラミング – Home

逆引きも可能な連想コンテナ
 
通知
すべてクリア

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


sakata
 sakata
(@sakata)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

VC++で開発している者です。

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

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

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

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

ご教授願います。


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

僕なら単に vector<pair<A,B>> 使うな。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

cppllに昔こんなスレがありますね。
> http://ml.tietew.jp/cppll/cppll/article/62

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

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

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


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

仮に自作するとして、
A → B は 1対1ですが、 B → A は1対多です。
そこのところはOK?


返信引用
sakata
 sakata
(@sakata)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

ご回答ありがとうございます。

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

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

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

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

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


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

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


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

使ったことなくて意識してませんでしたが(1.35かららしい…スルーしてました)、
boostにもそれっぽいの、いますね。こんなのですか?

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました