Sto usando i set. Io uso una struttura personalizzata come chiave. Sto inserendo un valore e sto cercando di trovare il valore inserito. Ma non sembra mai trovare l'elemento.C++ std :: set Trova funzione overloading == operatore
Ho sostituito sia l'operatore == che l'operatore <.
ecco il codice della struttura:
struct distance_t
{
public:
int id;
double distance;
bool operator<(const distance_t& rhs) const
{
if(distance < rhs.distance)
return true;
else
return false;
}
bool operator==(const distance_t& rhs)
{
if(id == rhs.id)
return true;
else
return false;
}
};
E questo è il codice della principale
int main()
{
set<distance_t> currentSet;
distance_t insertDistance;
insertDistance.id =1;
insertDistance.distance = 0.5;
currentSet.insert(insertDistance);
distance_t findDistance;
findDistance.id = 1;
assert(currentSet.find(findDistance) != currentSet.end());
}
Fallisce sempre nella dichiarazione assert. Che cosa sto facendo di sbagliato?
Modifica -Ok ora capisco che non utilizza affatto l'operatore ==. Ecco quello che voglio. Ho bisogno che la struttura dei dati sia ordinata per distanza. Ma dovrei riuscire a rimuoverlo usando l'id. Esiste un modo pulito o un datastructure già esistente per farlo?
Un suggerimento di stile: dove si ha 'if (expr) return true; altrimenti restituisci false; 'puoi invece semplicemente restituire expr;' – Blastfurnace
Cosa c'è di sbagliato con solo 'return id
@Blastfurnace Anche le parentesi non sono necessarie. –