Estoy usando sets. Yo uso una estructura personalizada como la clave. Estoy insertando un valor e intentando encontrar el valor insertado. Pero nunca parece encontrar el elemento.C++ std :: set Find function overloading == operator
He anulado tanto el operador == como el operador <.
Este es el código de la estructura:
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;
}
};
Y este es el código de la principal
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());
}
Siempre falla en la sentencia assert. ¿Qué estoy haciendo mal?
Editar -Ok ahora entiendo que no usa el operador == en absoluto. Esto es lo que quiero. Necesito que la estructura de datos se ordene por distancia. Pero debería poder eliminarlo usando la identificación. ¿Hay alguna forma limpia o una estructura de datos ya existente para hacer esto?
Sugerencia de estilo: donde tiene 'if (expr) return true; else return false; 'en su lugar, simplemente puede hacer' return expr; ' – Blastfurnace
¿Qué pasa con solo' return id
@Blastfurnace No necesita los paréntesis, tampoco. –