Punerea în aplicare a unei hărți de șiruri

voturi
0

Trebuie să pună în aplicare o clasă care se comportă ca o hartă de șiruri folosind arbore binar de căutare. Aceasta este clasa I puse în aplicare:

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

Pentru a fi sincer eu nu știu cum să pună în aplicare funcția getNextPair().
Dacă cineva ar putea să mă ajute aș aprecia.

Întrebat 06/03/2011 la 22:13
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
1

Interfața ta este un iterator intern. Ai nevoie de a păstra un fel de indicator pentru cazul în care vă aflați în iterație, și setați-l în getFirstPair ().

După ce adăugați acest lucru, getNextPair () doar merge la următoarea. Este oarecum dificil de a face acest lucru, dar asta e misiunea ta, așa că am să te las.

Reală std::maputilizează un iterator extern - care păstrează starea iterație separat de structura de date. Avantajul major este posibilitatea de a avea mai mult de o iterație simultan.

Publicat 06/03/2011 la 22:22
sursa de către utilizator

voturi
1

Fără a arunca doar algoritmul de getNextPair, va trebui să țină un fel de iterator intern, care va indica perechea „curent“. După ce ai primit, pentru a figura algoritmului pentru următoarea pereche trage-te un copac cu niște noduri și a vedea cum se poate găsi următorul nod în arborele dat orice nod din arbore.

Publicat 06/03/2011 la 22:46
sursa de către utilizator

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