std::map

3
@rshhh

std::map::insert() で与えられたキーの要素が既に存在してると挿入されないのは分かるんですけど、その場合に挿入されたか挿入されてないか判定する方法ないんですかね

2010-06-28 01:00:03
総長 @krustf

@rshhh insertの戻り値がpair< Key, bool >で、それのsecondメンバがfalseだと挿入されてない。だったはずです。

2010-06-28 01:02:25
@rshhh

@krustf あああ、そこまでは行き着いたんですけど、それって一般的な方法なのですか?クラストフさんのリプの文面からも、なんとなくもっといい方法がある感が伝わってくるのですががが

2010-06-28 01:04:28
総長 @krustf

@rshhh んー、どうなんでしょうねえ。一般的な方法、らしいのですが。

2010-06-28 01:08:09
総長 @krustf

STL本にはちゃんと載ってるのだろうか。

2010-06-28 01:09:48
@rshhh

@krustf ありがとでした!とりあえずその方法で実装して、もっといい方法ないか引き続き調べてみます。

2010-06-28 01:11:24
総長 @krustf

@rshhh いやー、お役に立てずごめんなさいです。

2010-06-28 01:12:15
@rshhh

@krustf そんなことないですー、モヤモヤがなくなりましたー、

2010-06-28 01:14:10
総長 @krustf

if( map.insert( pair( hoge, hogehoge ) ).second )としかならないのだろうか。

2010-06-28 01:14:49
pepshiso @pepshiso

@krustf insertする前に count を使えばいいと思いますよ。 if (!m.count(key)) { m.insert(p); } else { /* なにか処理 */ }

2010-06-28 01:18:09
総長 @krustf

@PepsiShiso おー、ありがとうございます。

2010-06-28 01:24:17
pepshiso @pepshiso

@krustf よく考えたらさっきの方法は効率的じゃないですね。忘れてください。 http://twitter.com/PepsiShiso/status/17177262722

2010-06-28 01:24:19
総長 @krustf

@PepsiShiso こっちの方が書きやすい気はしますね。insertの戻り値をチェックするのも微妙なんですよね・・・。

2010-06-28 01:27:02
総長 @krustf

map.countがbeginからendまでずーっと見るようなどう考えてもお馬鹿な方法をとってるとも思えないし・・・。

2010-06-28 01:29:32
総長 @krustf

map.findで見つかるか見つからないかをチェックして、0か1返すって実装になっているのであればこっちでも問題ないんじゃないかなあ。

2010-06-28 01:30:32
くっくっkura 🇯🇵🦀 @PG_kura

map の insert は戻り値見るっていうのでおkだと思うにゃー。オブジェクトのコピーコストが気になるなら count する、ぐらいですなぁ。

2010-06-28 01:32:17
pepshiso @pepshiso

@krustf map::count はふつう二分探索で実装されてるはずですよ。私が非効率的だと言ったのは count と insert とで2回探索していたからです。

2010-06-28 01:34:19
総長 @krustf

そんなに気張って考えなくても良いか。確かにコピーコストが気になるようなpairだったらmap.countの方がいいかも知れませんね。

2010-06-28 01:34:31
総長 @krustf

@PepsiShiso なるほど。確かに非効率的かもしれませんね。戻り値のpairオブジェクトのコピーコストの関係もあるので微妙な気がします。

2010-06-28 01:35:56
Norihisa Fujita, ぽん @fjnli

map.count(k)は、std::distance(map.upper_bound(k), map.lower_bound(k)) なんじゃないかな。

2010-06-28 01:37:58
総長 @krustf

std::mapだったらboost::unordered_map使っちゃうのですが。

2010-06-28 01:38:04
pepshiso @pepshiso

@krustf VC2010 に std::unordered_map として入ってますよ。

2010-06-28 01:41:54
@rshhh

しっかしSTLは難しいなー。STLの流儀ェ・・・

2010-06-28 01:41:59