문제

나는 가지고있다

std::list<multimap<std::string,std::string>::iterator> >

이제 새로운 요소가 생겼습니다.

multimap<std::string,std::string>::value_type aNewMmapValue("foo1","test")

임시 multimap을 설정할 필요가 없으며 반복자를 다시 가져 오기 위해 새 요소에 삽입하고 싶습니다. 그래서 나는 그것을 다시 밀어 넣을 수 있었다.

std::list<multimap<std::string,std::string>::iterator> >

어떻게든 임시 멀티맵 생성을 피할 수 있나요?감사해요

도움이 되었습니까?

해결책

반복기를 가져 오기 전에 키 값 쌍을 멀티 맵에 삽입해야합니다.

반복자는 그 자체로 작동하지 않습니다. 여러 가지 멀티 맵에서 반복자를 저장하는 경우 목록에 반복자 이상을 저장해야 할 것입니다.

아마도:

  1. pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>::iterator> 첫 번째는 반복자이고 두 번째는 엔드-타이터입니다.

  2. pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>*> 첫 번째는 반복자이고, 두 번째는 반복자가 속한 멀티 맵에 대한 포인터입니다.

  3. 다른 종류의 해결책.

편집 : 나는 Mykola Golubyev와 동의합니다. 반복자가 무효화 될 수 있으므로 반복자를 더 오랫동안 저장하는 것은 종종 나쁜 생각입니다.

다른 팁

귀하는 귀하의 컴퓨터에 저장하는 데이터 유형을 지정하지 않았습니다. list.어쨌든 특정 키가 가리키는 값을 추가한다고 가정하면 다음을 호출할 수 있습니다. list.insert(*mapIter).

multimap<std::string,std::string>::value_type aNewMmapValue("foo1","test")

이를 통해 멀티맵에 추가해야 합니다. map.insert.이 함수는 반복자를 반환합니다.그러면 이 반복자를 목록에 안전하게 추가할 수 있습니다.

std::list<multimap<std::string,std::string>::iterator> yourlist;
// ....
multimap<std::string,std::string>::iterator itr = 
                               yourmultimap.insert(aNewMmapValue);
yourlist.insert(itr);

유형 std::multimap<std::string,std::string>::iterator 반복자입니다 std::pair<const std::string, std::string> STD :: 멀티 맵에 저장됩니다. 요소가 멀티 맵에 저장되지 않으면 mulitmap iterator를 통해 참조 할 수 없습니다.

사용을 저장하고 싶을 수도 있습니다 std::list<std::pair<std::string,std::string> > 대신에.

반복자를 저장하지 마십시오. const iterators를 사용하거나 더 나은 방법은 포인터를지도의 요소에 저장하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top