c++ - std::unordered_map 的递增迭代器

标签 c++ stl unordered-map

为什么第 7 行和第 8 行不好?为什么对某些迭代器进行 in-/decrement 是不好的?

#include <unordered_map>

int main()
{
    std::unordered_multimap<int,int> myumm({{1,3},{3,2},{5,5},{0,9}});
    auto first = myumm.begin();
    auto second = first+1;      // bad
    auto third = --myumm.end(); // bad too
    auto fourth = myumm.end();
}

最佳答案

std::unordered_multimap 提供前向迭代器。这些是您可以分配、取消引用、比较和递增的迭代器。

为了能够递减迭代器 (--it),您至少需要一个双向迭代器(例如 std::multimap< 提供的)/)。

为了能够将(任意数字)添加到迭代器 (it + 1),您需要一个随机访问迭代器(例如 提供的std::vector).要将较弱的迭代器提升不止一个位置,请使用 std::advance(it, 42)(用于将 it 提升到位)或 std::next(it, 42)(返回递增的拷贝并且不修改 it)。

关于c++ - std::unordered_map 的递增迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28278789/

相关文章:

c++ - unordered_map中哪个 “find”或 “at”更快?

c++ - glPixelStorei(GL_UNPACK_ALIGNMENT, 1) 缺点?

android - 编译android-ndk代码的问题

c++11 - std::vector.push_back(std::move(foo)) 有意义吗?

c++ - 与以空结尾的字符串相比,std::string 的效率如何?

c++ - Xcode 4.2 上的 unordered_map

c++ - 如何在双变量中检查 inf(和 | 或)NaN

C++ 从链表中删除节点

c++ - 反向 map 查找

c++ - clang 6 不支持 unordered_map::merge?