Implementovat mapy řetězců

hlasů
0

Musím zavést třídu, která se chová jako mapa stringů pomocí binárního vyhledávacího stromu. Toto je třída I implementována:

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();
    }
};

Abych byl upřímný, nevím, jak implementovat funkce getNextPair().
Pokud se někdo mi mohl pomoci bych to ocenil.

Položena 06/03/2011 v 22:13
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

Vaše rozhraní je interní iterátor. Musíte mít nějaký ukazatel na místo, kde jste v iteraci, a nastavte ji v getFirstPair ().

Jakmile přidáte to, getNextPair () prostě přejde na další jeden. To je poněkud obtížné, jak to udělat, ale to je váš úkol, takže nechám na vás.

Skutečná std::mappoužívá externí iterace - která udržuje stav iteraci odděleně od datové struktury. Hlavní výhodou je možnost mít více než jeden současně iteraci.

Odpovězeno 06/03/2011 v 22:22
zdroj uživatelem

hlasů
1

Aniž by jen házet algoritmus pro getNextPair, budete muset mít nějaký druh vnitřního iterátoru, který bude ukazovat na „aktuální“ páru. Jakmile se dostal to, aby se přijít na algoritmu pro další dvojici kreslit sami strom s některými uzly a zjistit, jak je možné najít další uzel ve stromové struktuře dané jakýkoliv uzel ve stromu.

Odpovězeno 06/03/2011 v 22:46
zdroj uživatelem

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