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

Can I iterate over an std::map key range even if the boundary keys don't exist?

本文关键字:std 遍历 map 范围 是否 边界 不存在      更新时间:2023-10-16

我有一个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>

或者,是否有其他容器可以做到这一点?我不喜欢使用向量,因为在我的程序中,实际上包含值的键之间可能存在很大的间隙,而且我不想在只有几个项的情况下迭代数千个空索引。

您可以使用std::maplower_bound()upper_bound()方法来定位与给定键最近的值的迭代器。有关这些方法如何工作的文档,请参阅您的c++书籍。

一旦获得了最近键的迭代器,就可以像往常一样进行迭代了。