utilizzando la funzione di confronto in contenitore STL
-
10-10-2019 - |
Domanda
Perché posso fare questo:
stable_sort(it1, it2, binary_function);
, ma non in questo modo:
priority_queue<type, vector<type>, binary_function> pq;
Perché è possibile utilizzare una funzione nel primo caso, ma hanno bisogno di un oggetto nella seconda?
Soluzione
Se si controlla il riferimento sulla std::stable_sort
, si vedrà che la binary_function
hai fornito , dovrebbe essere un oggetto funzione così ... non v'è alcuna differenza tra i due, tranne che forse nel secondo caso non c'è proprio "cast" o la conversione fatta da una funzione ad un oggetto il corretto funzionamento.
Credo che questo può essere dovuto al fatto che le funzioni *sort
usa il funtore direttamente, ed immediatamente, quindi se l'indirizzo funzione è valida quando viene chiamata la funzione *sort
, sarà valido per la durata della chiamata di funzione. Durante la creazione di un contenitore che utilizza questo come un membro di dati (in sostanza), non si può essere sicuri che il riferimento alla funzione diventerà invalidato durante il ciclo di vita dell'oggetto contenitore. Lo so che è una spiegazione handwaving sciolto, ma è il meglio che posso venire con. Forse in C ++ il riferimento ad una funzione binaria viene implicitamente convertito alla costruzione di un std::function
modo che la funzione viene "copiato" e non c'è alcun problema di validità.
Spero di non aver perso te ora ...
Altri suggerimenti
priority_queue
è un modello e si aspetta un tipo come argomento, dove si binary_function
è un oggetto funzione.