C++:如何从定义的容器对象中获取迭代器类型

Che*_*Cat 2 c++ containers templates iterator typedef

我有一个代码在一个表单中:

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;
}
Run Code Online (Sandbox Code Playgroud)

我如何避免定义要在List声明中使用的新类型EdgesIt并以更智能的方式获取它,例如:

list<Edges::iterator_type> List;
Run Code Online (Sandbox Code Playgroud)

InteliSense仅建议将Edges::iterator其定义为typedef std::iterator pair<int,int> iterator.更多的说,它不起作用.我也试过用unordered_set::iterator,但它也行不通.

son*_*yao 7

Edges是对象的名称,而不是类的名称(和名称空间等).您无法直接从中获取嵌套的typedef Edges::iterator.

你可以使用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;
Run Code Online (Sandbox Code Playgroud)