提问人: 提问时间:1/30/2013 最后编辑:templatetypedef 更新时间:1/30/2013 访问量:6208
为什么unordered_map没有 rbegin() 或 rend(),而只有 begin() 和 end()
why does unordered_map not have rbegin() or rend(), but only begin() and end()
问:
使用 begin()、end() 和前向迭代器遍历 似乎很奇怪。unordered_map
如果是这样,为什么它也没有 rbegin()、rend() 和双向迭代器? 有什么技术原因吗?
答:
23赞
juanchopanza
1/30/2013
#1
它是无序的,因此迭代发生的顺序(或应该)不重要。
评论
1赞
PhiloRobotist
2/7/2022
如果顺序不重要,为什么会有 begin() 和 end() 迭代器?begin() & end() 不暗示有秩序吗?
0赞
juanchopanza
2/7/2022
@PhiloRobotist我的猜测是,它将与其他标准库容器兼容。
11赞
billz
1/30/2013
#2
引自The C++ Standard Library
反向迭代器允许算法通过切换 在内部调用增量运算符到递减的调用中 运算符,反之亦然。所有具有双向迭代器的容器 或随机存取迭代器(除 forward_list和所有关联容器)可以创建反向 迭代器通过其成员函数 rbegin() 和 rend()。从 C++11 开始, 返回只读迭代器的相应成员函数, 还提供了 crbegin() 和 crend()。
对于forward_lists和无序容器,无需向后迭代 提供了接口(rbegin()、rend() 等)。原因是 实现只需要单链表即可遍历 元素。
评论
1赞
Michael Burr
1/30/2013
在标准中:23.5.4.1/1 类模板unordered_map概述:“unordered_map类支持前向迭代器”。前向迭代器是不可逆的。
2赞
choxsword
2/27/2018
为什么unordered_map有一个 begin(),因为它是无序的?
评论