質問

なぜ私はこれを行うことができます:

stable_sort(it1, it2, binary_function);

しかし、これではありません:

priority_queue<type, vector<type>, binary_function> pq;

最初のケースで関数を使用できるのはなぜですが、2番目のケースにオブジェクトが必要ですか?

役に立ちましたか?

解決

参照をチェックする場合 std::stable_sort, 、あなたはそれを見るでしょう binary_function お客様は、機能オブジェクトである必要があります... 2番目のケースでは、適切な「キャスト」または適切な関数オブジェクトへの変換がない場合を除き、2つの間に違いはありません。

これは、 *sort 関数はfunctorを直接使用し、すぐに使用します。したがって、関数アドレスが有効である場合 *sort 関数は呼び出され、関数呼び出しの期間中に有効になります。これをデータメンバーとして(本質的に)使用するコンテナを作成する場合、コンテナオブジェクトの寿命の間に関数参照が無効になるかどうかはわかりません。私はそれがゆったりした手荷の説明であることを知っていますが、それは私が思いつくことができる最高です。おそらくC ++では、バイナリ関数への参照は、 std::function そのため、関数が「コピー」され、妥当性の問題はありません。

私は今あなたを失っていないことを願っています...

他のヒント

priority_queue テンプレートであり、引数としてタイプを期待しています。 binary_function 関数オブジェクトです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top