STLコンテナの比較関数を使用します
-
10-10-2019 - |
質問
なぜ私はこれを行うことができます:
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
関数オブジェクトです。
所属していません StackOverflow