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

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

我有一个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++ 书籍。

获得最近键的迭代器后,您可以像往常一样迭代。