为什么"unordered_map::iterator"不提供"operator--"?
Why "unordered_map::iterator" does not provide "operator--"?
在传统的map中,我们可以创建这样的代码:
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> m;
m[666]=222;
m[777]=333;
auto it = --(m.end());
cout << (*it).first;
return 0;
}
如果需要,向后移动。然而,对于几乎相同的代码,unordered_map我们得到一个编译时错误,观察:
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<int, int> m;
m[666]=222;
m[777]=111;
auto it = --(m.end());
cout << (*it).first;
return 0;
}
prog.cpp:9:12: error: no match for 'operator--' (operand type is 'std::unordered_map<int, int>::iterator {aka std::__detail::_Node_iterator<std::pair<const int, int>, false, false>}')
auto it = --(m.end());
^
是标准定义的这种差异(因此在某处解释)还是编译器错误?
map
和ordered_map
有不同的迭代器要求(强调我的):
map
iterator
双向迭代器来value_type
unordered_map
iterator
value_type
的前向迭代器
相关文章:
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 'operator='已弃用:改用 QDir::setPath()
- 过载'operator new'如何导致无限循环?
- 与'operator='不匹配(操作数类型'String'且"void")
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 处理"no operator found"
- 如何编写 operator= 用于使用虚拟方法与非平凡成员的匿名联合
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- 运算符重载:"operator+"必须采用零个或一个参数
- 使用 operator() 扩展 Eigen::EigenBase
- std::iterator::reference 必须是引用吗?
- 错误消息:使用"string* +="后"no match for 'operator+='"
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- "operator +="行为异常的定义
- C++ "error: use of overloaded operator '*' is ambiguous"似乎只有一场比赛
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- 在 Eclipse: "error: no match for 'operator='" 中获取错误消息
- 为什么 operator() 处的指针成员不起作用?
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- 为什么"unordered_map::iterator"不提供"operator--"?