网站 加域名,网站建设怎么提需求,设计云官网,wordpress首屏加载速度我们知道std::map内部是一个红黑树#xff0c;放到std::map里的数据等有一个能比较大小的方法。它相当于java里面的TreeMap。 它里面有个lower_bound方法#xff0c;返回一个迭代器#xff0c;它指向map里第一个大于等于参数的元素。 方法的签名很简单#xff0c;但是在不同…我们知道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){endn;}//Extent() : end(0) {}int logical_end() const { return end; } // 简化逻辑};using extent_map_t std::mapint, 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::coutfp extent_map.begin : (fp extent_map.begin()) fp extent_map.end : (fp extent_map.end())std::endl;std::coutextent_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;
}