我必须使用二叉搜索树实现一个类似于字符串映射的类。这是我实施的课程:
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()
功能
如果有人能帮助我,我会很感激。
答案 0 :(得分:1)
您的界面是内部迭代器。你需要保留一些指向你在迭代中的位置的指针,并在getFirstPair()中设置它。
一旦你添加了这个,getNextPair()就会转到下一个。这样做有点困难,但这是你的任务,所以我留给你。
实际的std::map
使用外部迭代器 - 它使迭代的状态与数据结构分开。主要优点是能够同时进行多次迭代。
答案 1 :(得分:1)
如果不抛出getNextPair的算法,你需要保留某种内部迭代器,它将指向“当前”对。一旦你得到它,为了计算下一对的算法,自己绘制一个带有一些节点的树,看看如何在给定树中任何节点的树中找到下一个节点。