即使边界键不存在,我可以遍历std :: map键范围吗?

时间:2016-10-02 23:39:40

标签: c++ c++11 iterator c++14 stdmap

我有std::map<int, object>

如果地图包含:

std::pair<1, obj1>
std::pair<3, obj2>
std::pair<4, obj3>
std::pair<6, obj4>
std::pair<8, obj5>
std::pair<9, obj6>
std::pair<14, obj7>

我是否可以从不存在的密钥中迭代此地图,例如i=5..10(假设地图中实际上没有任何键5和10)?我想使用这些值来获得输出,例如:

std::pair<6, obj3>
std::pair<8, obj3>
std::pair<9, obj3>

或者,是否有其他容器可以做到这一点?我不想使用向量,因为在我的程序中,实际包含值的键之间可能存在较大的间隙,并且当不存在少量项时,我不想迭代数千个空索引,例如。

1 个答案:

答案 0 :(得分:1)

您可以使用lower_bound()的{​​{1}}和upper_bound()方法找到给定键的最近值的迭代器。有关这些方法如何工作的文档,请参阅C ++书籍。

获得最近的键的迭代器后,可以照常迭代。