std::map

3
総長 @krustf

@PepsiShiso ですね。std::map使わなくなるかも・・・。

2010-06-28 01:45:05
くっくっkura 🇯🇵🦀 @PG_kura

map の insert の話で気になってしまった。こうした場合、型パラメータ T_Any, T_Val を使わずに書けたりするのだろーか? http://ideone.com/c9ZRj

2010-06-28 02:02:06
くっくっkura 🇯🇵🦀 @PG_kura

T_Any て。T_Key にしろよ。RT @PG_kura: map の insert の話で気になってしまった。こうした場合、型パラメータ T_Any, T_Val を使わずに書けたりするのだろーか? http://ideone.com/c9ZRj

2010-06-28 02:09:34
めるぽん.c @melponn

TやUに変換できるものは関数呼び出しの際に変換されるでしょうからいらないんじゃないですかね。あとわざわざcount呼び出す必要無いような気が QT @PG_kura: map の insert の話で気になってしまった。こうした場合、型パラメータ T_Any, T_Val を使わ

2010-06-28 02:59:49
めるぽん.c @melponn

まあしかし答えを紛失したのでもう一度Effective STLを開かないといけないわけですが。

2010-06-28 03:06:13
pepshiso @pepshiso

@melponn それは value の型に依存しますよね。

2010-06-28 03:06:27
普通のC++使い、銀天すばる @SubaruG

auto const p = m.insert( make_pair( key, value ) ); if( p.second == false ){ p.first->second = value; }

2010-06-28 03:08:37
めるぽん.c @melponn

@PepsiShiso どのみち map に入れる時点で value の型に依存したものに変換されるような・・・ってああ、そっかこれって呼び出すときにstringに変換されると効率が悪いからチェックしてinsertしてるんですね。納得です

2010-06-28 03:09:44
めるぽん.c @melponn

if (it != m.end() && !m.key_comp()(k, it->first)) がパッと出てきたら頭おかしいです!

2010-06-28 03:12:00
めるぽん.c @melponn

等価と等値の両方を持っているクラスを、トーチカと呼ぶのはどうだろうか

2010-06-28 03:15:13
普通のC++使い、銀天すばる @SubaruG

僕の頭脳ではこれが限界。 lower_bound とか頭おかしい。 http://ideone.com/olkjt

2010-06-28 03:18:55
普通のC++使い、銀天すばる @SubaruG

僕のコードだと、更新時も無駄に pair にコピーしちゃうから遅いってのは分かる。

2010-06-28 03:19:31
Norihisa Fujita, ぽん @fjnli

※語尾がにゃーなのは、化物語の配信を見ているからです。

2010-06-28 03:23:16
普通のC++使い、銀天すばる @SubaruG

一応、僕のコードは unordered_map でも動くっていう利点があるはず・

2010-06-28 03:25:18
めるぽん.c @melponn

何でこれだとダメだったんだっけとEffective STLを開き直した自分とは大違いだ・・・ RT @SubaruG: 僕のコードだと、更新時も無駄に pair にコピーしちゃうから遅いってのは分かる。

2010-06-28 03:25:38
普通のC++使い、銀天すばる @SubaruG

unordered で効率を最大にしたい場合は…どうするんだろうね?

2010-06-28 03:27:15
Norihisa Fujita, ぽん @fjnli

unorderd_map版はむずいなー。

2010-06-28 03:32:08
Norihisa Fujita, ぽん @fjnli

unorderd_map版は思い付かないな。

2010-06-28 03:40:50
pepshiso @pepshiso

value の型が POD のときは単に m[key] = value とするのが明快ですし、おそらく速いんですよね。すると POD と 非POD を分けるのにテンプレートメタプログラミングが出てきて今のところ私の手に負えなくなってしまうということに。

2010-06-28 03:42:24
めるぽん.c @melponn

emplace 使えば、pair の value_type を構築するためのコストとか気にしなくてよくなるのかなぁ・・・

2010-06-28 03:49:04
めるぽん.c @melponn

@PepsiShiso 速いかどうかは分かりませんけど、とりあえず POD と非 POD 分けるだけなら boost::enable_if<boost::is_pod<Value> >::type* = 0 とか引数に入れてやればいいような?

2010-06-28 03:53:04
pepshiso @pepshiso

@melponn こんな感じでしょうか。(勝手に改変させて頂いてますが。) http://ideone.com/IJLso

2010-06-28 04:15:16