Реализовать карту строк

голоса
0

Я должен реализовать класс, который ведет себя как карта строк с использованием бинарного дерева поиска. Это класс, я реализовал:

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

Если честно , я не знаю , как реализовать функцию getNextPair().
Если кто - то может помочь мне , что я ценю это.

Задан 06/03/2011 в 22:13
источник пользователем
На других языках...                            


2 ответов

голоса
1

Ваш интерфейс является внутренним итератором. Вы должны держать своего рода указатель туда, где вы находитесь в итерации, и установить его в getFirstPair ().

После добавления этого getNextPair () просто переходит к следующему. Это довольно трудно сделать это, но это ваше задание, поэтому я оставляю вам.

Фактический std::mapиспользует внешний итератор , который держит - состояние итерации отдельно от структуры данных. Основное преимущество является возможность иметь более одного одновременную итерацию.

Ответил 06/03/2011 в 22:22
источник пользователем

голоса
1

Без просто бросал алгоритм getNextPair, вам нужно будет держать какое-то внутренний итератор, который будет указывать на «текущую» пару. После того, как вы получили, что для того, чтобы выяснить алгоритм для следующей пары нарисовать себе дерево с некоторыми узлами и посмотреть, как можно найти следующий узел в дереве данного любой узел в дереве.

Ответил 06/03/2011 в 22:46
источник пользователем

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