为什么unordered_map没有rbegin()或rend(),但只有begin()和end()

时间:2013-01-29 23:21:20

标签: c++ c++11 iterator unordered-map

使用begin(),end()和forward迭代器迭代unordered_map似乎很奇怪。

如果是这样,为什么它也没有rbegin(),rend()和双向迭代器呢? 有什么技术原因吗?

2 个答案:

答案 0 :(得分:21)

它是无序的,因此迭代发生的顺序是(或应该)不重要。

答案 1 :(得分:10)

引自The C++ Standard Library

  

反向迭代器让算法通过切换来反向操作   在内部调用增量运算符进入减量调用   运算符,反之亦然。所有带双向迭代器的容器   或随机访问迭代器(除了以外的所有序列容器)   forward_list和所有关联容器)可以创建反向   迭代器通过它们的成员函数rbegin()和rend()。从C ++ 11开始,   返回只读迭代器的相应成员函数,   还提供了crbegin()和crend()。

     

对于forward_lists和无序容器,没有向后迭代   提供了接口(rbegin(),rend()等)。原因是   实现只需要单独链接列表来完成   元件。