You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何查找std::map内处于查询范围的键区间?

问题解析:std::map::lower_bound(3)为何返回end迭代器?

首先得明确std::map的lower_bound和upper_bound的核心行为——因为map是升序有序存储的,这两个函数的规则是:

  • lower_bound(key):返回容器中第一个**不小于(>=)**key的元素迭代器;如果所有元素都小于key,就返回end()。
  • upper_bound(key):返回容器中第一个**大于(>)**key的元素迭代器;如果所有元素都小于等于key,就返回end()。

回到你的场景,map里的键是-2、1、2,全都是小于3的。那lower_bound(3)要找第一个>=3的元素,显然不存在,所以直接返回end()迭代器——这完全符合函数的定义逻辑。

而你之前用lower_bound(-3)能拿到-2,是因为-2是第一个>=-3的元素,刚好存在,所以返回正确。

正确获取[-3,3]范围边界的方法

如果要拿到范围[-3,3]内实际存在的最大键(也就是2),可以这么做:

auto it_upper = m.upper_bound(3);
if (it_upper != m.begin()) {
    auto right_bound = std::prev(it_upper);
    // right_bound 就是指向键2的迭代器
}

原理是:upper_bound(3)返回第一个>3的元素(也就是end()),用std::prev往前移动一位,就得到了容器中最后一个<=3的元素,也就是你要的右边界。

左边界的获取你已经做对了:m.lower_bound(-3)直接返回第一个>=-3的元素(-2),没问题。

内容的提问来源于stack exchange,提问作者Gaurav K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:36:02