Gjennomføre et kart over strenger

stemmer
0

Jeg må implementere en klasse som oppfører seg som et kart over strenger bruker binært søketre. Dette er den klassen jeg implementert:

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

For å være ærlig vet jeg ikke hvordan man implementerer funksjonen getNextPair().
Hvis noen kunne hjelpe meg ville jeg sette pris på det.

Publisert på 06/03/2011 klokken 21:13
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Grensesnittet er en intern iterator. Du må holde en slags peker til hvor du er i iterasjon, og sette den i getFirstPair ().

Når du legger til dette, getNextPair () bare går til den neste. Det er litt vanskelig å gjøre dette, men det er din oppgave, så jeg la det til deg.

Den faktiske std::mapbruker et eksternt iteratoren - som holder tilstanden av iterasjons atskilt fra datastrukturen. Den store fordelen er å kunne ha mer enn én samtidig iterasjon.

Svarte 06/03/2011 kl. 21:22
kilden bruker

stemmer
1

Uten bare å kaste algoritmen for getNextPair, må du holde noen form for intern iterator som vil peke til "dagens" par. Når du fikk den, for å finne algoritmen for neste paret tegne selv et tre med noen noder og se hvordan man kan finne den neste node i treet gitt enhver node i treet.

Svarte 06/03/2011 kl. 21:46
kilden bruker

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