c++ - 重命名 map 迭代器的第一个和第二个

标签 c++ stl map iterator

有没有办法重命名映射迭代器的第一个和第二个访问器函数。我知道它们有这些名称是因为代表键和值的底层对,但我希望迭代器更具可读性。我认为这可能使用迭代器适配器,但我不确定如何实现它。

请注意,我不能使用 boost。

我的意思的例子:

map<Vertex, Edge> adjacency_list;
for(map<Vertex, Edge>::iterator it = adjacency_list.begin();
    it != adjacency_list.end();
    ++it)
{
    Vertex v = it->first;
    //instead I would like to have it->vertex
}

最佳答案

如果您只关心可读性,您可以这样做:

typedef map<Vertex, Edge> AdjacencyList;
struct adjacency
{
    adjacency(AdjacencyList::iterator& it) 
      : vertex(it->first), edge(it->second) {}
    Vertex& vertex;
    Edge& edge;
};

然后:

Vertex v = adjacency(it).vertex;

关于c++ - 重命名 map 迭代器的第一个和第二个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1500064/

相关文章:

c++ - 使用 C++ 样式转换将 int 转换为 char

c++ - 如何在 std::set 中存储二维几何 vector

c++ - 将字值转换为具有设定值的键映射

c++ - "::"中的 "::tolower"是什么意思?

map - 存储解构映射供以后使用

php - 确定重叠地理区域的算法

java - 我什么时候使用 java Collections singletonMap 方法?

android - AOSP/Android 源码索引工具

c++ - 关于函数对象的这段是什么

c++ - C++ 中的装饰器设计模式