Implementare una mappa di stringhe

voti
0

Devo implementare una classe che si comporta come una mappa di stringhe utilizzando albero binario di ricerca. Questa è la classe ho implementato:

template<class T>
class StringMapper {
private:
    // Pair
    struct Pair {
        std::string el1;
        T el2;
    };

    // Nod
    struct Node {
        Pair* data;
        Node* left;
        Node* right;
        Node()
        {
            data = new Pair;
        }
        ~Node()
        {
            delete data;
        }
        int nod_size()
        {
             // code here
        }
    };
    Node* root;
public:
    StringMapper()
    {
        root = 0;
    }
    ~StringMapper() {}
    void insert(std::string from, const T& to)
    {
        // code here
    }

    bool find(std::string from,const T& to) const
    {
        return find(root, to);
    }

    bool find(Node* node, const T& value) const
    {
        // code here
    }

    bool getFirstPair(std::string& from, T& to)
    {
        if(root != 0)
        {
            from = root->data->el1;
            to = root->data->el2;
            return true;
        }
        return false;
    }
    bool getNextPair(std::string& from, T& to)
    {
        if(root != 0)
        {

        }
        return false;
    }

    int size() const
    {
        return root->nod_size();
    }
};

Ad essere onesti non so come implementare la funzione getNextPair().
Se qualcuno mi potrebbe aiutare sarei grato.

È pubblicato 06/03/2011 alle 22:13
fonte dall'utente
In altre lingue...                            


2 risposte

voti
1

L'interfaccia è un iteratore interno. È necessario mantenere una sorta di indicazione di dove ci si trova nella iterazione, e impostarlo in getFirstPair ().

Una volta che si aggiunge questa, getNextPair () va solo a quello successivo. E 'un po' difficile fare questo, ma questo è il vostro compito, quindi lascio a voi.

L'attuale std::maputilizza un iteratore esterna - che mantiene lo stato dell'iterazione separato dalla struttura dati. Il vantaggio principale è quello di poter avere più di un'iterazione simultanea.

Risposto il 06/03/2011 a 22:22
fonte dall'utente

voti
1

Senza appena gettare l'algoritmo per getNextPair, è necessario mantenere un qualche tipo di iteratore interno che punterà alla coppia "corrente". Una volta che si ha che, al fine di capire l'algoritmo per la coppia prossima disegnare voi stessi un albero con alcuni nodi e vedere come si può trovare il prossimo nodo nell'albero dato alcun nodo nell'albero.

Risposto il 06/03/2011 a 22:46
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more