Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 23
  1. #11
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    20
    fantastico! pensavo che l'unico modo per aggiungere elementi al vector fosse quello di aggiungere in coda e poi ordinare!
    ora vedo di capirci..
    potresti mica spiegarmi in maniera semplice come effettuare questo inserimento?

  2. #12
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Prova a guardare questo codice:

    codice:
    #include <iostream>
    #include <vector>
    #include <string>
    
    
    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) {
                std::cout << d[i][j] << std::endl;
            }
        }
    }
    
    
    
    
    void insert_in_dictionary(dictionary D, std::string word)
    {
        int letter = word[0]-'a';
        if(D[letter].size() == 0) {
            D[letter].push_back(word);
            return;
        }
    
    
        for(std::vector<std::string>::iterator it = D[letter].begin(); it != D[letter].end(); ++it) {
            if((*it).compare(word) > 0) {
                D[letter].insert(it, word);
                return;
            }
        }
    }
    
    
    
    
    int main()
    {
        dictionary D;
    
    
        std::string word = "apple";
        insert_in_dictionary(D, word);
    
    
        std::string another_word = "airplane";
        insert_in_dictionary(D, another_word);
    
    
        std::string just_another_word = "another";
        insert_in_dictionary(D, just_another_word);
    
    
        print_dictionary(D);
    
    
        return 0;
    }

    Nota: l'ho scritto un po' al volo... Sembra funzionare, ma non è da escludere che ci sia qualche errore!

  3. #13
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Infatti un errore c'era: non funzionava nel caso la parola da inserire dovesse andare in ultima posizione. Ora dovremmo esserci:

    codice:
    void insert_in_dictionary(dictionary D, std::string word)
    {
        int letter = word[0]-'a';
        if(D[letter].size() == 0) {
            D[letter].push_back(word);
            return;
        }
    
    
        for(std::vector<std::string>::iterator it = D[letter].begin(); it != D[letter].end(); ++it) {
            if((*it).compare(word) > 0) {
                D[letter].insert(it, word);
                return;
            }
        }
        
        D[letter].push_back(word);
    }

  4. #14
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    20
    ho qualche difficoltà nel capire il for.. a parte il fatto che nel mio codice ho usato using namespace std; , non mi sono ben chiari i vari comandi

  5. #15
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Praticamente dichiaro un oggetto iterator che "punta" al primo elemento del vettore (ottenuto con begin), poi lo incremento (++it) fino alla fine del vettore (ottenuta con end).
    All'interno del for ottengo l'elemento a cui punta l'iteratore (cioè la stringa, corrispondente a una parola memorizzata nel dizionario) tramite una normale dereferenziazione, quindi *it. Su questa stringa posso poi chiamare il metodo compare per fare in modo di rispettare l'ordinamento desiderato.

  6. #16
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    20
    Ok, ho capito. Il programma compila anche, però col comando -Wall mi da questi errori:

  7. #17
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Eh certo... hai dichiarato la funzione come bool! Quindi devi ritornare un booleano in ogni caso, mentre tu ritorni un booleano in due casi su tre. Per risolvere dovresti mettere un return true (o false) anche dopo l'ultima riga.

    In ogni caso non so se sia utile dichiarare la funzione come bool. Dopotutto quando è che ritorni false?

  8. #18
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    20
    ahhhh ho capito!
    Caspita, sei stato illuminante. Grazie davvero :O Se ho ancora problemi ti ricontatto qui!

  9. #19
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    20
    Ecco: c'è anche una funzione per la delete oltre che l'inserimento?
    Oppure devo trovare la parola, spostare tutte le celle e fare un resize?

  10. #20
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    No no c'è anche la funzione erase. È da usare con un po' di cautela perchè invalida gli iteratori, ma per eliminare una sola parola non ci sono problemi.

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.