Quindi ho un array (0 - n), con valori che voglio std :: set da usare per il suo ordinamento. L'array è senza firma int costo [n].Perché non posso costruire std :: set con un'istanza di un predicato, ma posso assegnare un oggetto std :: set costruito in quel modo?
Sto utilizzando il seguente funtore per questo ordinamento:
struct ProxySorter {
ProxySorter(const unsigned* arr) : proxy_array(arr) {}
bool operator()(const unsigned& a, const unsigned& b) const {
return proxy_array[a] < proxy_array[b];
}
const unsigned* proxy_array;
};
Quindi, ecco il problema ... Quando costruisco il set, questo è legale:
std::set<unsigned, ProxySorter> node_queue = std::set<unsigned, ProxySorter>(ProxySorter(cost));
non ottengo errori e tutto funziona come previsto. Ma questo sembra violato e sciatto.
Tuttavia, questo è apparentemente illegale:
std::set<unsigned, ProxySorter> node_queue(ProxySorter(cost));
Cercando di costruire solo con il ProxySorter (costo) provoca un po 'di errori, dicendo cose come questa per ogni chiamata membro insieme:
error: request for member erase in node_queue, which is of non-class type std::set<unsigned int, ProxySorter>(ProxySorter)
Qual è il problema con la costruzione normale? Perché il compito funziona? Qual è la differenza qui che mi manca? Qualsiasi aiuto molto apprezzato, grazie.
Oh e mi dispiace per il titolo della domanda, non ero proprio sicuro di come chiamarlo.
Perché, perché altrimenti viene analizzato come una dichiarazione di funzione? Wow. –
Wow. Beh, non l'avrei mai capito. –
@John: Sì, vedi la mia piccola modifica e il link. – Xeo