C++에서 지우기 기능을 사용하는 데 문제가 있습니다. 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<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<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> > > >
을 변환 할 수 없습니다 나타내는 컴파일하는 동안 오류를 준다? 나는 반복기 대신 const_iterator를 사용하여 시도하지만, 이것은 단지
std::vector<SegmentMap::const_iterator >::iterator it = parent->second.children.begin();
해명에 컴파일 오류가 이동 : 내가 삭제 기능은 const가 아닌 반복자를 기대 알고있다. TreeElement 클래스에서 부모 및 자식의 선언을 변경하지 않고이 비 const 반복기를 만드는 방법을 찾고 있습니다.
부모 선언을 변경하지 않고 비 const 반복기를 만들 수있는 방법이 있습니까? – user1611565
@ user1611565 당신은 물론'const'를 던져 넣을 수 있습니다. 그러나 그것은 매우 추악합니다. 어쨌든 const_interator를 사용하고 싶다면 코드에 일반적인 반복자를 사용하지 못하게하는 요소는 없습니다. –
저는 현재 기존 시스템에 메소드를 추가하고 있는데,이 경우에는 delete 메소드입니다. TreeElement 클래스를 변경하지 않아도됩니다. – user1611565