实现字符串映射

时间:2011-03-06 21:14:00

标签: c++ data-structures binary-search-tree

我必须使用二叉搜索树实现一个类似于字符串映射的类。这是我实施的课程:

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()功能 如果有人能帮助我,我会很感激。

2 个答案:

答案 0 :(得分:1)

您的界面是内部迭代器。你需要保留一些指向你在迭代中的位置的指针,并在getFirstPair()中设置它。

一旦你添加了这个,getNextPair()就会转到下一个。这样做有点困难,但这是你的任务,所以我留给你。

实际的std::map使用外部迭代器 - 它使迭代的状态与数据结构分开。主要优点是能够同时进行多次迭代。

答案 1 :(得分:1)

如果不抛出getNextPair的算法,你需要保留某种内部迭代器,它将指向“当前”对。一旦你得到它,为了计算下一对的算法,自己绘制一个带有一些节点的树,看看如何在给定树中任何节点的树中找到下一个节点。