Использование функции сравнения в контейнере STL

StackOverflow https://stackoverflow.com/questions/4450401

Вопрос

Почему я могу сделать это:

stable_sort(it1, it2, binary_function);

но не это:

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

Почему я могу использовать функцию в первом случае, но нужен объект во втором?

Это было полезно?

Решение

Если вы проверите ссылку на std::stable_sort, вы увидите, что binary_function Вы предоставили, также должен быть функциональным объектом ... нет никакой разницы между ними, за исключением того, что, возможно, во втором случае нет правильного «актера» или преобразования, сделанного от функции в правильный объект функции.

Я считаю, что это может быть связано с тем, что *sort функции используют функтор непосредственно и сразу же, таким образом, если адрес функции действителен, когда *sort Функция вызывается, она будет действительной для продолжительности вызова функции. При создании контейнера, который использует его в качестве члена данных (по сути), вы не можете быть уверены, что ссылка на функцию будет недействительной в течение времени жизни объекта контейнера. Я знаю, что это свободное объяснение рук, но это лучшее, что я могу придумать. Возможно, в C ++ ссылка на бинарную функцию будет значительно преобразована в конструкцию std::function так что функция «скопирована», и нет никакой проблемы достоверности.

Надеюсь, я не потерял тебя сейчас ...

Другие советы

priority_queue это шаблон, и он ожидает типа как аргумент, где binary_function является функциональным объектом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top