まどろみの思考空間スマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。読者です読者をやめる読者になる読者になるまどろみの思考空間2012-09-16std::unordered_mapやstd::mapの比較用のファンクタとしてラムダ式を渡すC++プログラミングやろうとして意外に面倒だった。だれも書いていないみたいなので書いておく。面倒なのはstd::unordered_mapのほうなのでこちらについて主に書く。面倒なのは基本的にテンプレート引数としてファンクタを渡す仕様になっているということ。ラムダ式は型ではないので当然テンプレート引数として渡すことができない。デフォルトの型というのがラムダ式を受け取れるような型ではない(std::equal_to)になっているのでコンストラクタにそのまま渡すということができない。そこでstd::funcでラムダ式を受け取れるようにテンプレートパラメータを変更しなくてはいけない。その前にハッシュ関数のファンクタを指定するテンプレートパラメータがあるのでそれはデフォルトにしてとかやる必要がある。あれこれいっててもわかりにくいと思うのでサンプルをあげておく。char*をキーにしたかったわけだがその比較のためにファンクタをわたす必要があった。0;}std::mapのほうはハッシュ関数を指定しなくていいので多少楽だ。第三テンプレート引数にstd::functionを指定するだけで普通に渡せるようになる。0;}たぶん、ラムダ式が存在しない時代はテンプレートで指定できるほうが便利だったのだろう。今となっては逆に面倒だ。Blog|ブログを報告する。