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

获取std::map中lower_bound迭代器的前一个元素的高效方法

高效获取std::map lower_bound迭代器的前一个元素

嘿,你完全没必要遍历整个map来做这件事——std::map的迭代器是双向迭代器,天生支持直接向前移动的操作,这可比遍历的O(n)复杂度高效太多了,直接就能实现O(1)的操作!

具体实现步骤

  1. 先获取你的lower_bound迭代器:
std::map<unsigned int, char> m_map { 
    std::make_pair(0, 'a'), 
    std::make_pair(5, 'b'), 
    std::make_pair(10, 'c'), 
    std::make_pair(15, 'd') 
};

auto lower_bound_it = m_map.lower_bound(7); // 指向(10, 'c')
  1. 检查这个迭代器是否是map的起始位置(begin()):如果是,说明没有前一个元素;如果不是,直接用std::prev()或者递减操作获取前一个元素的迭代器:
if (lower_bound_it != m_map.begin()) {
    // 用std::prev生成新的前向迭代器,不会修改原lower_bound_it
    auto prev_element_it = std::prev(lower_bound_it);
    // 现在prev_element_it指向(5, 'b')
    std::cout << "前一个元素:键=" << prev_element_it->first << ",值=" << prev_element_it->second << std::endl;
} else {
    // 边界情况:lower_bound返回第一个元素,没有前一个元素
    std::cout << "当前迭代器是第一个元素,不存在前一个元素" << std::endl;
}

注意事项

  • 如果你不需要保留原lower_bound_it,也可以直接对它做递减操作:--lower_bound_it,但这样会改变原迭代器的指向,根据你的实际需求选择即可。
  • 一定要先判断是否等于begin(),否则对begin()做递减操作会导致未定义行为,程序可能崩溃或者出现异常结果。

内容的提问来源于stack exchange,提问作者Sumit Jha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:59:17