当前位置: 首页 > news >正文

谈谈std::map的lower_bound

我们知道std::map内部是一个红黑树,放到std::map里的数据等有一个能比较大小的方法。它相当于java里面的TreeMap。
它里面有个lower_bound方法,返回一个迭代器,它指向map里第一个大于等于参数的元素。
方法的签名很简单,但是在不同情况下,它的返回值还是有些麻烦的,这里记录一下。

分别指明下面几种case

case结果
set为空reesult 是end迭代器,且begin与end相同
指定的key 存在result是begin迭代器,且begin与end不相同
指定的key 不存在,且set中所有值都大于keyreesult是begin迭代器,且begin与end不相同
指定的key 不存在,且set中所有值都小于keyreesult是end迭代器,且begin与end不相同
指定的key 不存在,且set中有的值大于key,有的小于keyreesult指向第一个大于它的元素的迭代器,且begin与end不相同

测试代码如下:

#include <iostream>
#include <map>// 假设的类和结构体定义,仅用于演示
struct Extent {public:int end;explicit Extent( int n){end=n;}//Extent() : end(0) {}int logical_end() const { return end; } // 简化逻辑};using extent_map_t = std::map<int, Extent>; // 假定的映射类型class BlueStore {
public:extent_map_t extent_map;extent_map_t::iterator seek_lextent(int offset) {auto fp = extent_map.lower_bound(offset);std::cout<<"fp == extent_map.begin :"<< (fp == extent_map.begin()) <<" fp == extent_map.end :" <<(fp == extent_map.end())<<std::endl;std::cout<<"extent_map.begin() == extent_map.end() "<< (extent_map.begin() == extent_map.end())<<std::endl;if (fp != extent_map.begin()) {--fp;std::cout<< (fp == extent_map.begin()) <<" " <<(fp == extent_map.end())<<std::endl;if (fp->second.logical_end() <= offset) {++fp;}}return fp;}
};
int main() {BlueStore store_empty;Extent extent2(5);store_empty.extent_map.emplace(20,extent2);store_empty.extent_map.emplace(30,extent2);auto empty_result = store_empty.seek_lextent(25);if (empty_result == store_empty.extent_map.end()) {std::cout << "For an empty map, seek_lextent returns end()." << std::endl;} else {std::cout << "Unexpected behavior for empty map." << std::endl;}return 0;
}
http://www.lryc.cn/news/349856.html

相关文章:

  • 不知道代理IP怎么挑?一文带你了解挑选的关键点!
  • java 并发线程应用
  • Java面试八股文(SpringCloud篇)
  • PWRWER
  • 怎样恢复E盘里删了的文件夹,2024让EasyRecovery来帮你轻松恢复
  • OSPF实验
  • 喜茶·茶坊黑金首店入驻北京三里屯,率先引入珍稀娟姗奶制茶
  • C++(week3):数据结构与算法
  • ✅HTTPS和HTTP的区别是什么?
  • AIGC、LLM 加持下的地图特征笔记内容生产系统架构设计
  • 快速入门go语言学习笔记
  • MS41908M替代AN41908
  • Lc33---- 414. 第三大的数(java版)---排序(去重/复制到新数组)
  • OpenAI新模型GPT-4o“炸裂登场” 响应速度堪比真人 关键还免费!
  • C语言收尾 预处理相关知识
  • Python代码:二、多行输出
  • 前端内嵌iframe网页单点登录的三种方式
  • Git篇——Git提交指定文件编码
  • 在云服务器上运行StyleGAN3生成伪样本
  • 学习Nginx(三):命令与信号
  • 软信天成:业务流程管理驱动企业数字化转型
  • 「Python绘图」绘制同心圆
  • Unity基础
  • OpenHarmony 实战开发——ArkUI canvas组件
  • js积累一(ipv4正则校验+弹窗方式)
  • 【Android】重写onClick方法时,显示Method does not override method from its supperclass
  • LeetCode 第397场周赛个人题解
  • Mysql数据库二进制日志导致磁盘满了处理过程
  • 前端面试题日常练-day07 【面试题】
  • Uniapp H5开发常见问题解析