Tengo una clase que representa un usuario llamado Nick
y quiero usar std::find_if
en ella, donde quiero encontrar si el vector de la lista de usuarios tiene un objeto incluido con el mismo nombre de usuario que paso. Intenté algunos intentos intentando crear Nick
un nuevo objeto para el nombre de usuario que quiero probar y sobrecargar el == operator
y luego tratar de utilizar find/find_if
en el objeto:Cómo usar std :: find/std :: find_if con un vector de objetos de clase personalizados?
std::vector<Nick> userlist;
std::string username = "Nicholas";
if (std::find(userlist.begin(), userlist.end(), new Nick(username, false)) != userlist.end())) {
std::cout << "found";
}
he sobrecargado el == operator
por lo comparando Nick == nick2 debería funcionar, pero la función devuelve error C2678: binary '==' : no operator found which takes a left-hand operand of type 'Nick' (or there is no acceptable conversion)
.
Aquí es mi clase de Nick como referencia:
class Nick {
private:
Nick() {
username = interest = email = "";
is_op = false;
};
public:
std::string username;
std::string interest;
std::string email;
bool is_op;
Nick(std::string d_username, std::string d_interest, std::string d_email, bool d_is_op) {
Nick();
username = d_username;
interest = d_interest;
email = d_email;
is_op = d_is_op;
};
Nick(std::string d_username, bool d_is_op) {
Nick();
username = d_username;
is_op = d_is_op;
};
friend bool operator== (Nick &n1, Nick &n2) {
return (n1.username == n2.username);
};
friend bool operator!= (Nick &n1, Nick &n2) {
return !(n1 == n2);
};
};
En realidad, en lugar de definir una función de amigo, debería usar la función de miembro bool operator == (const Nick & a). –
Tiene la opción, pero hay muchos programadores a los que les gusta evitar miembro si no es necesario y tener operador como == como funciones externas de amigo libre. Creo que también es el caso de las implementaciones de la biblioteca estándar. – Nikko
Acabo de intentar como sugirió. ¿No debería la respuesta ser así: 'std :: find (userlist.begin(), userlist.end(), y Nick (username, false));'? – Marschal