@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
pepshiso
@pepshiso
@krustf insertする前に count を使えばいいと思いますよ。 if (!m.count(key)) { m.insert(p); } else { /* なにか処理 */ }
2010-06-28 01:18:09
pepshiso
@pepshiso
@krustf よく考えたらさっきの方法は効率的じゃないですね。忘れてください。 http://twitter.com/PepsiShiso/status/17177262722
2010-06-28 01:24:19
くっくっ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
@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