我在使用 C++ 中的擦除函数时遇到问题。
我有以下结构:
typedef std::map<std::string,TreeElement> ObjMap;
class TreeElement {
public:
ObjMap::const_iterator parent;
std::vector<ObjMap::const_iterator > children;
}
现在我正在尝试使用擦除函数从其父级的子级列表中删除一个 TreeElement。
//Remove from parent
SegmentMap::const_iterator parent = segment->second.parent;
std::vector<SegmentMap::const_iterator >::const_iterator it = parent->second.children.begin();
for(;((*it)->first != segment->first) && (it != parent->second.children.end()); it++);
parent->second.children.erase(it); //Compilation fails
这会在编译期间出现错误,表明它无法转换
__gnu_cxx::__normal_iterator<const std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, TreeElement> >*, std::vector<std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, TreeElement> > > >
到
__gnu_cxx::__normal_iterator<std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, TreeElement> >*, std::vector<std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, TreeElement> > > >
有没有什么办法解决这一问题?我尝试使用迭代器而不是 const_iterator 但这只是将编译错误移至
std::vector<SegmentMap::const_iterator >::iterator it = parent->second.children.begin();
澄清:我知道擦除函数需要一个非常量迭代器。我正在寻找一种方法来创建此非常量迭代器,而无需更改TreeElement 类中父项和子项的声明。