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

12 c++ iterator unordered-map c++11

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

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

jua*_*nza 21

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


bil*_*llz 10

引自 The C++ Standard Library

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

对于forward_lists和无序容器,不提供反向迭代接口(rbegin(),rend()等).原因是实现只需要单个链表来遍历元素.

  • 既然 unordered_map 是无序的,为什么它有一个 begin() 呢? (2认同)