为什么"unordered_map::iterator"不提供"operator--"?

Why "unordered_map::iterator" does not provide "operator--"?

本文关键字:operator-- iterator map 为什么 unordered      更新时间:2023-10-16

在传统的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());
            ^

是标准定义的这种差异(因此在某处解释)还是编译器错误?

mapordered_map有不同的迭代器要求(强调我的):


map iterator双向迭代器来value_type


unordered_map iterator value_type的前迭代器