2016-11-11 78 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; 

智能感知表明Edges::iterator其被定義爲typedef std::iterator pair<int,int> 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;