递增std :: unordered_map的迭代器

时间:2015-02-02 13:26:36

标签: c++ stl unordered-map

为什么第7行和第8行不好?为什么输入/减少某些迭代器是不好的?

#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();
}

1 个答案:

答案 0 :(得分:9)

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

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

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

相关问题