c++映射使用错误类型begin()重载的自定义迭代器



对于学校练习,我试图使用红黑树方法重新编码地图STL容器,当我调用它们时,我遇到了使用begin()过载的问题。为了测试的目的,我试图用以下函数显示我的地图的内容:

template <typename T>
inline void printMapContainer(T& cont)
{
for (typename T::const_iterator it = cont.begin(); it != cont.end(); ++it)
std::cout << "[" << it->first << "][" << it->second << "] | ";
}

但是我得到一个错误,告诉我从迭代器类型到const_iterator类型没有可行的转换。这意味着当循环调用begin()时,它调用返回iterator而不是const_iterator的非const begin()函数。我的实现如下:

iterator                    begin()
{
return (iterator(this->_tree.begin()));
};
const_iterator              begin()                     const
{
return (const_iterator(this->_tree.begin()));
};

_tree.begin()函数将节点返回到树的头部元素,然后在map类中定义迭代器:

typedef typename    ft::rb_tree<value_type, Compare>::iterator      iterator;
typedef typename    ft::rb_tree<value_type, Compare>::const_iterator    const_iterator;

我做错了什么?

@n.1.8e9-where 's-my-sharem说:

任何迭代器都应该转换为相应的const_iterator。可以在迭代器类中添加转换操作符,也可以添加将构造函数转换为const_iterator类。

我缺少的是const_iterator类中的构造函数,它可以复制迭代器的内容!

最新更新