Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    20

    Aggiungere elementi ad array di vector in C++?

    Ciao a tutti. Sto implementando un dizionario.
    Ho dichiarato il seguente array di vector:


    typedef std::vector<std::string> dictionary [num_letters];

    dove num_letters è a sua volta stata dichiarata come:
    const unsigned num_letters = ('z' - 'a') + 1;

    Ho fatto un array di 26 celle quindi, così dentro ad ogni cella c'è una lettera e le parole che iniziano per quella lettera. La domanda è questa: come faccio ad aggiungere un elemento alla cella? Perchè so che posso trattare il vector come un array bidimensionale, e a prima vista farei:

    D[W[0]-'a'].push_back(W);

    Solo che così non so se sto aggiungendo nel modo giusto, infatti comilando mi da segmentation fault.
    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao, un primo problema che mi viene in mente è questo: che succede se la prima lettera della tua parola è maiuscola? A quel punto la sottrazione con 'a' dà ovviamente un valore fuori range e ottieni un segfault.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    20
    ho una fz che converte le parole maiuscole in minuscole.
    il problema è solo aggiungere le cose che non so come si faccia

  4. #4
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ho provato ma non riesco a replicare il tuo errore. Questo è il codice che ho utilizzato:

    codice:
    #include <iostream>
    #include <vector>
    #include <string>
    
    
    using namespace std;
    
    
    const unsigned int num_letters = ('z' - 'a') + 1;
    
    
    typedef std::vector<std::string> dictionary [num_letters];
    
    
    void print_dictionary(dictionary d) {
        for(unsigned int i=0; i<num_letters; ++i) {
            for(unsigned int j=0; j<d[i].size(); ++j) {
                cout << d[i][j] << endl;
            }
        }
    }
    
    
    int main()
    {
        dictionary D;
        
        string word = "apple";    
        D[word[0]-'a'].push_back(word);
        
        string another_word = "tree";
        D[another_word[0]-'a'].push_back(another_word);
        
        print_dictionary(D);
        
        return 0;
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    20
    cosa centra la stampa? io per ora vorrei inserire elementi nelle celle dell'array di vector

  6. #6
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Quote Originariamente inviata da in4matic Visualizza il messaggio
    cosa centra la stampa?
    Mi sembra evidente che l'ho utilizzata per vedere se tutto funzionava correttamente. E in effetti sembra proprio che sia tutto ok. Altrimenti come avrei dovuto fare per vedere se le parole erano state memorizzate correttamente?

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    20
    scusa non aveva caricato bene la pagina!
    Mi hai risolto il problema: nella mia mente trattavo il vector come monodimensionale. Grazie

  8. #8
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Sì il dizionario è bidimensionale: con il primo indice accedi alla "lettera del dizionario", che però è a sua volta un vettore. Quindi con il secondo indice accedi alla specifica parola.Ciao!

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    20
    domanda: se mi dovessi trovare ad ordinare, ogni volta che inserisco una parola, la cella del mio vector (o meglio, solo la cella della parola inserita), che algortmo di ordinamento sarebbe utile da usare?
    Sono indeciso tra selecton e insertion sort.. Alla fine la mia lista di nomi è semre in ordine, devo semplicemente ordinare l'ultimo inserito ogni volta dopo il push_back

  10. #10
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Se ho ben capito quello che intendi, tu vuoi ordinare il vector che contiene tutte le parole che iniziano con una data lettera. Allora potresti evitare del tutto la push_back ed inserire direttamente la parola nella posizione corretta. Quindi scorri il vector (tramite un iteratore) e sfrutti il metodo insert.

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.