Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    129

    [c++] ricercare una stringa in un vector

    ciao a tutti

    allora ho la classe Nodo
    codice:
    class Nodo{
    private:
        vector<short> adiacenza;
        string nome;
    public:
        Nodo(){};
        void set_nome(string nome_nodo){nome=nome_nodo;};
        void mostra_nome(){cout<<nome;}
        string get_nome(){return nome;}
        void agg_nodo_adiac(short ad){adiacenza.push_back(ad);};
        int get_size_ad(){return adiacenza.size();};
        short get_ad(short i){return adiacenza[i];};
        ~Nodo(){};
    };
    e poi ho un vector
    vector<class Nodo> nodi;

    ora voglio trovare nel vector nodi se esiste un nodo con un certo nome

    posso usare find?
    in questo modo?

    elemento = find(nodi.begin(),nodi.end(),nome_nodo_adiacente);

    elemento è un iteratore dichiarato cosi:
    vector <class Nodo>::iterator elemento;

    perchè quando compilo mi si apre il file stl_algo.h e non va a buon fine
    cosa sbaglio

    grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Hai un vettore di oggetti Nodo, non puoi cercare una string.
    A parte che dovrebbe essere
    codice:
    vector<Nodo> nodi;
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    129
    Nel senso che non è possibile trovare stringhe con find?

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    QUOTE:
    codice:
    template <class InputIterator, class T>
        InputIterator find (InputIterator first, InputIterator last, const T& val);
    [...]
    The function uses operator== to compare the individual elements to val.
    [...]

    Come puoi comparare un oggetto Nodo e un oggetto string con operator== ?
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    129
    Capito è che

    il vector è un vector di oggetti nodi
    E il nome sta nella variabile nome che si può accedere con getnome
    E quindi non posso usare find

  6. #6
    In realtà puoi a patto di usare find_if con un functore custom per il confronto; in C++11 con una lambda è immediato:
    codice:
    elemento = find_if(nodi.begin(),nodi.end(),
                    [=](Nodo &n)
                    {
                        return n.get_nome() == nome_nodo_adiacente;
                    });
    In C++03 devi stare a definire un functore separato (ad esempio con una struct e ridefinendone l'operator()), per cui di fatto fai prima a ciclare "a mano" sul vettore.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.