2014年6月23日月曜日

C++: std::priority_queue (など)にステート付きのラムダ式を Compare 関数オブジェクトとして渡すには?

迷路を解くソフトウェアの解説用資料の作成を兼ねてごにょごにょ書いていました。ダイクストラ法にせよA*法にせよ、全域探索するにせよしないにせよ、いずれにしても現実的には std::priority_queue を使ったほうが効率が良いので、使うことに。

使うことにしたのは良いのですがステート付きの比較関数オブジェクトを渡したいし、ラムダ式を使いたい。そんな時には、 Compare 型引数に std::function を定義しておいて、 ctor で任意のステート付きのラムダ式を渡すと楽、かな(╹◡╹)

コード量的には先にラムダ式を const auto で定数に受けておいて、 decltype を Compare 型引数に渡して、定数に入れておいたラムダ式を ctor で渡す、でも良いのだろうけど、かえって複雑で実行効率もよろしくないと思うので、こんな具合の実装で良いんじゃ、ないかな。

0 件のコメント:

コメントを投稿