[Risolto] [C++] Funzione find su un vettore di tipo generico

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
edoz90
Prode Principiante
Messaggi: 242
Iscrizione: giovedì 26 agosto 2010, 18:40
Desktop: Cinnamon
Distribuzione: Arch Linux

[Risolto] [C++] Funzione find su un vettore di tipo generico

Messaggio da edoz90 »

Ciao a tutti!!
Devo creare una funzione che controlli la presenza di una City c in vector<City> tour.

Ho provato a fare:

Codice: Seleziona tutto

bool Tour::containsCity(City c) {
    std::vector<City>::iterator iter = std::find_if(this->tour.begin(), this->tour.end(), c);
    size_t index = std::distance(this->tour.begin(), iter);
    if (index == this->tour.size()) {
        return false;
    }else {
        return true;
    }
}
ma mi restituisce questo errore:

Codice: Seleziona tutto

g++    -c -g -MMD -MP -MF "build/Debug/GNU-Linux-x86/Tour.o.d" -o build/Debug/GNU-Linux-x86/Tour.o Tour.cpp
/usr/include/c++/4.9.0/bits/predefined_ops.h: In instantiation of ‘bool __gnu_cxx::__ops::_Iter_pred<_Predicate>::operator()(_Iterator) [with _Iterator = __gnu_cxx::__normal_iterator<City*, std::vector<City> >; _Predicate = City]’:
/usr/include/c++/4.9.0/bits/stl_algo.h:120:22:   required from ‘_RandomAccessIterator std::__find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate, std::random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<City*, std::vector<City> >; _Predicate = __gnu_cxx::__ops::_Iter_pred<City>]’
/usr/include/c++/4.9.0/bits/stl_algo.h:162:43:   required from ‘_Iterator std::__find_if(_Iterator, _Iterator, _Predicate) [with _Iterator = __gnu_cxx::__normal_iterator<City*, std::vector<City> >; _Predicate = __gnu_cxx::__ops::_Iter_pred<City>]’
/usr/include/c++/4.9.0/bits/stl_algo.h:3804:45:   required from ‘_IIter std::find_if(_IIter, _IIter, _Predicate) [with _IIter = __gnu_cxx::__normal_iterator<City*, std::vector<City> >; _Predicate = City]’
Tour.cpp:64:92:   required from here
/usr/include/c++/4.9.0/bits/predefined_ops.h:231:30: error: no match for call to ‘(City) (City&)’
  { return bool(_M_pred(*__it)); }
Come posso fare?

Grazie :ciao:
Ultima modifica di edoz90 il lunedì 16 giugno 2014, 1:34, modificato 1 volta in totale.
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [c++] Funzione find su un vettore di tipo generico

Messaggio da 1001001 »

Ciao! Potresti postare anche l'implementazione della classe City per favore?
"I find your lack of faith disturbing."
edoz90
Prode Principiante
Messaggi: 242
Iscrizione: giovedì 26 agosto 2010, 18:40
Desktop: Cinnamon
Distribuzione: Arch Linux

Re: [c++] Funzione find su un vettore di tipo generico

Messaggio da edoz90 »

Ciao! scusa per il ritardo....
alla fine ho capito che era più veloce fare un ciclo for sul vector e controllare se a == b con un overloading dell'operatore ==

Codice: Seleziona tutto

bool Tour::containsCity(City c) {
    bool found = false;
    for (int i = 0; i < this->tour.size(); i++) {
        if (this->tour[i] == c) 
            found = true;
    }
    return found;
}

Codice: Seleziona tutto

bool City::operator == (City c) {
	return (this->id == c.id);
}
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [c++] Funzione find su un vettore di tipo generico

Messaggio da 1001001 »

Ok, se hai risolto ricordati di aggiungere [Risolto] al titolo del primo messaggio per favore :)

Ciao! :ciao:
"I find your lack of faith disturbing."
edoz90
Prode Principiante
Messaggi: 242
Iscrizione: giovedì 26 agosto 2010, 18:40
Desktop: Cinnamon
Distribuzione: Arch Linux

Re: [RISOLTO][c++] Funzione find su un vettore di tipo gener

Messaggio da edoz90 »

Dimenticavo....:D
ixamit
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 499
Iscrizione: giovedì 14 novembre 2013, 10:16

Re: [RISOLTO][c++] Funzione find su un vettore di tipo gener

Messaggio da ixamit »

edoz90 ha scritto:bool Tour::containsCity(City c) {
    bool found = false;
    for (int i = 0; i < this->tour.size(); i++) {
        if (this->tour == c)
            found = true;
    }
    return found;
}

Non per essere pedante, ma il test dovrebbe contenere un ... && !found
EDIT: poco chiaro, ma credo sia ovvio... per il test intendo quello della for non quello della if
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 7 ospiti