Wdrożenie mapę ciągów

głosy
0

Muszę zaimplementować klasę, która zachowuje się jak mapa ciągów wykorzystujących binarne drzewo poszukiwań. Jest to klasa I wdrożone:

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

Szczerze mówiąc, nie wiem, jak wdrożyć funkcję getNextPair().
Jeśli ktoś może mi pomóc bym go docenić.

Utwórz 06/03/2011 o 22:13
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
1

Twój interfejs jest wewnętrzny iterator. Trzeba zachować jakieś wskazówki, gdzie jesteś w iteracji i ustawić go w getFirstPair ().

Po dodaniu tego getNextPair () po prostu przechodzi do następnej. Jest to dość trudne, aby to zrobić, ale to jest twoje zadanie, więc zostawiam to do ciebie.

Rzeczywista std::mapkorzysta z zewnętrznego iterator - który utrzymuje stan iteracji odrębną od struktury danych. Główną zaletą jest możliwość, aby mieć więcej niż jedno jednoczesne iteracji.

Odpowiedział 06/03/2011 o 22:22
źródło użytkownik

głosy
1

Bez tylko rzucanie algorytm dla getNextPair, trzeba będzie zachować jakiś wewnętrzny iterator który będzie wskazywać na „bieżącym” pary. Raz masz, że w celu figury algorytm dla następnej pary narysować sobie drzewa z niektórych węzłach i zobaczyć, jak można znaleźć następny węzeł w drzewie danego każdy węzeł w drzewie.

Odpowiedział 06/03/2011 o 22:46
źródło użytkownik

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