- - PR -
双方向検索できる仕組みはありますか
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2002-05-25 15:24
えと…そうじゃなくて…
isseki: > Hashtable#put(a,b)をすれば > あくまでも > Hashtable#get(a)でbを取得することになって > Hashtable#get(b)でaを取得することは決してできないので と iseeki: > KEY objectとVALUE objectも一対一でまったく対称的ですから、 > VALUE objectからKEY objectを取得できるような実装(仕様)になっても から、hatena さんがおっしゃっているように、isseki さんが「key と value が一対一」なんていう大きな誤解をしたはるんではないかなと。 なので、「put(a,b); put(c,b);」ができるんだから一対一じゃないことは確かめられるでしょ、ということです。 目的が「value から key を引きたい」なら、keys から探すしかないです。 set(key, value) { hash.put(key,value); hash.put(value, key); } しても、 set(a, b); set(c, b); すると k v a -> b b -> a c -> b b -> c で get(b) が後優先になったりして、同様のことが set(a,b); set(b,c); でも起こったりして…。わけわからんす。ちゃんと key と value が一対一になってるかを確認しないといけませんから、汎用クラスとして意味があるかは…。 |
|
投稿日時: 2002-05-25 17:41
しょむさん:
> hatena さんがおっしゃっているように、isseki さんが「key と value > が一対一」なんていう大きな誤解をしたはるんではないかなと。 なるほど、それでしたか。 > なので、「put(a,b); put(c,b);」ができるんだから一対一じゃないことは確 > かめられるでしょ、ということです。 ここで、 > このとき hastable.get(b); はどうなるんでしょう。 これが突然出てきて面食らったんですが、このときのset()は > set(key, value) { hash.put(key,value); hash.put(value, key); } という実装を想定していたわけですね。これは読みきれませんでした。 > で get(b) が後優先になったりして、同様のことが set(a,b); set(b,c); で > も起こったりして…。わけわからんす。ちゃんと key と value が一対一にな > ってるかを確認しないといけませんから、汎用クラスとして意味があるかは…。 確かに、Hashtableは同一キーに対する値の重複を許しませんから、put()の 戻り値を確認してやるしかないですね。 個人的には、「valueとして値のListを渡す」などの回避策を示すことも しばしばです。 |
|
投稿日時: 2002-05-27 13:03
みなさん
こんにちは いろいろご意見本当にいい勉強になりました。 isseki wrote: >KEY objectとVALUE objectも一対一でまったく対称的ですから、 書いた後、馬鹿だなと自分も気づいたが、すぐ訂正できませんでした。m(__;);m ありがとう御座いました。 |
