2016-11-11 2 views
0

에서 반복자 타입을 얻기 위해 어떻게 형태의 코드를 가지고 :C + +를 : 정의 된 컨테이너 개체

unordered_set<pair<int,int>,CustomHash> Edges; 
typedef unordered_set<pair<int,int>,CustomHash>::iterator EdgesIt; 
... 
for(auto it=Edges.begin();it!=Edges.end();it++){ 
    list<EdgesIt> List; 
} 

등 나는 목록 선언에 사용에서 그것을 얻을 수있는 새로운 유형의 EdgesIt을 정의 피할 수있는 방법 예를 들어 어떤 현명한 방법은 :

list<Edges::iterator_type> List; 

InteliSense 만 typedef std::iterator pair<int,int> iterator으로 정의된다 Edges::iterator을 제안한다. 더 말할 것도없이 작동하지 않습니다. 또한 unordered_set::iterator을 사용해 보았지만 작동하지 않습니다.

+1

"작동하지 않습니다"는 유용한 문제 설명이 아닙니다. 'typedef Edges :: iterator EdgesIt; '이 맞습니다. –

답변

5

Edges은 개체의 이름이며 클래스 (및 네임 스페이스 등)의 이름이 아닙니다. Edges::iterator과 같이 중첩 된 typedef를 직접 가져올 수는 없습니다.

decltype (C++ 11 이후)을 사용하여 원하는 유형 (예 : unordered_set<pair<int,int>,CustomHash>)을 얻을 수 있습니다. 예 :

list<decltype(Edges)::iterator> List; // same as list<unordered_set<pair<int,int>,CustomHash>::iterator> List; 
관련 문제