en utilisant la fonction de comparaison dans le récipient de stl
-
10-10-2019 - |
Question
Pourquoi puis-je faire ceci:
stable_sort(it1, it2, binary_function);
mais pas ceci:
priority_queue<type, vector<type>, binary_function> pq;
Pourquoi puis-je utiliser une fonction dans le premier cas, mais besoin d'un objet dans la seconde?
La solution
Si vous cochez la référence std::stable_sort
, vous verrez que le binary_function
vous a fourni , devrait être un objet fonction aussi bien ... Il n'y a pas de différence entre les deux, sauf que peut-être dans le second cas il n'y a pas bon « cast » ou la conversion faite à partir d'une fonction à un objet de fonctionnement.
Je crois que cela peut être dû au fait que les fonctions de *sort
utilisent foncteur directement et immédiatement, donc si l'adresse de fonction est valide lorsque la fonction *sort
est appelée, elle sera valable pour la durée de l'appel de fonction. Lors de la création d'un conteneur qui utilise en tant que membre de données (en substance), vous ne pouvez pas être sûr que la référence de fonction sera invalidée au cours de la durée de vie de l'objet conteneur. Je sais qu'il est un lâche explicitation argument qualitatif, mais il est le meilleur que je peux trouver. Peut-être en C ++ la référence à une fonction binaire sera convertie à la construction implicitement d'un std::function
pour que la fonction est « copié » et il n'y a pas de problème de validité.
J'espère que je ne vous ai pas perdu maintenant ...
Autres conseils
priority_queue
est un modèle et il attend un type d'argument, où est binary_function
est un objet de fonction.