談談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.pswp.cn/web/11845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11845.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11845.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

富格林:有效預防黑幕阻撓被騙

富格林指出&#xff0c;在投資領域&#xff0c;現貨黃金是一種備受推崇的貴金屬投資品種。倘若能有效預防黑幕阻撓被騙的情況&#xff0c;事實上現貨黃金是很多投資者的“理想型”。然而要想有效地預防黑幕阻撓被騙&#xff0c;就需要掌握足夠多的投資技巧。為此&#xff0c;富…

Milvus 基本概念

Milvus 是一個開源的向量數據庫&#xff0c;專門用于高效地存儲、管理和檢索大規模向量數據。它基于 Apache 許可證 2.0 版本發布&#xff0c;由 Zilliz 公司開源并維護。 Milvus 的設計理念是為了解決向量數據存儲和檢索的挑戰。在許多應用中&#xff0c;向量數據是一種重要的…

強化學習——馬爾可夫過程的理解

目錄 一、馬爾可夫過程1.隨機過程2.馬爾可夫性質3.馬爾可夫過程4.馬爾可夫過程示例 參考文獻 一、馬爾可夫過程 1.隨機過程 隨機過程是概率論的“動態”版本。普通概率論研究的是固定不變的隨機現象&#xff0c;而隨機過程則專注于那些隨時間不斷變化的情況&#xff0c;比如天…

C# 使用channel 實現Plc 異步任務之間的通信

channel 通信的例子: using ConsoleApp2; using System.Collections.Concurrent; using System.Threading.Channels;var queue = new BlockingCollection<Message>(new ConcurrentQueue<Message>());var opt = new BoundedChannelOptions(10) {FullMode = BoundedC…

Linux環境快速部署mysql5.7

1 網絡下載rpm包 wget -c https://repo.huaweicloud.com/mysql/Downloads/MySQL-5.7/mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar2 解壓 tar xf mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar3 數據庫之間會沖突因此需要卸載mariadb-libs yum remove mariadb-libs4 安裝 如果沒有…

R語言兩種方法實現隨機分層抽樣

為了減少數據分布的不平衡&#xff0c;提供高樣本的代表性&#xff0c;可將數據按特征分層一定的層次&#xff0c;在每個層次抽取一定量的樣本&#xff0c;為分層抽樣。分層抽樣的特點是將科學分組法與抽樣法結合在一起&#xff0c;分組減小了各抽樣層變異性的影響&#xff0c;…

HTTP協議及Python實現

最近的項目需要頻繁在前后端之間傳輸數據&#xff0c;本篇主要介紹HTTP協議以及數據傳輸方法。 1 HTTP協議 1.1 http協議簡介 HTTP(Hypertext Transfer Protocol)是一種用于傳輸超文本數據的應用層協議。它是萬維網上數據交換的基礎&#xff0c;定義了客戶端和服務器之間進行通…

C語言指針詳解(三)

目錄 前言 一. 回調函數是什么&#xff1f; 1.定義 2. 代碼示例&#xff1a;計數器 2.1 使用回調函數改造前 2.2 使用回調函數改造后 二. qsort使用舉例 1. qsort介紹 2. 使用qsort函數排序整型數據 3. 使用qsort排序結構體數據 三. qsort函數的模擬實現 四. sizeo…

代碼隨想錄:螺旋矩陣II相關題目推薦(54、LCR146)

59.螺旋矩陣II 題目 給你一個正整數 n &#xff0c;生成一個包含 1 到 n2 所有元素&#xff0c;且元素按順時針順序螺旋排列的 n x n 正方形矩陣 matrix 。 示例 1&#xff1a; 輸入&#xff1a;n 3 輸出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 代碼&#xff08;新解法&am…

MyBatis——MyBatis 參數處理

一、單個簡單類型參數 簡單類型包括&#xff1a; byte short int long float double char Byte Short Integer Long Float Double Character String java.util.Date java.sql.Date parameterType 屬性&#xff1a;告訴 MyBatis 參數的類型 MyBatis 自帶類型自動推斷機制…

LLM應用-prompt提示:生成搜索相關問題、生成回答格式包含參考資料

參考: https://isou.chat/ (AI回答與相關問題都是根據問題的搜索引擎結果結合大模型生成的) prompt參考: https://github.com/yokingma/search_with_ai/blob/6d32aa8f05f5f6ee12b5204787035b3f7797c22a/src/prompt.ts#L8 ##rag 根據搜索結果知識回答RagQueryPrompt = ` …

在Go語言中,可以這樣使用Json

在Go語言中&#xff0c;處理JSON數據通常涉及編碼&#xff08;將Go結構體轉換為JSON字符串&#xff09;和解碼&#xff08;將JSON字符串轉換為Go結構體&#xff09;。Go標準庫中的encoding/json包提供了這些功能。第三方插件可以使用"github.com/goccy/go-json"也有同…

Git | git log 和 git status 的區別

如是我聞&#xff1a; git log和git status是Git中的兩個非常有用的命令&#xff0c;它們用于不同的目的&#xff0c;并提供不同類型的信息。 git log git log命令用于顯示一個或多個分支的提交歷史記錄。這個命令會列出提交歷史&#xff0c;包括每次提交的SHA-1哈希值、提交…

程控水冷阻性負載主要工作方式

程控水冷阻性負載是一種先進的電力設備&#xff0c;主要用于電力系統的測試和研究。它的主要工作方式是通過控制水冷系統的溫度&#xff0c;來模擬不同的阻性負載條件&#xff0c;從而對電力設備進行各種性能測試。 首先&#xff0c;我們需要了解什么是阻性負載。阻性負載是指那…

博弈智能的特點

博弈智能是指通過算法和模型對博弈過程進行分析和決策的智能系統。在博弈中&#xff0c;各方參與者追求自身利益和目標&#xff0c;會采取各種策略來達到自己的目標。其中&#xff0c;包括了一些不正當手段&#xff0c;如詭計和欺騙&#xff08;詭&#xff09;&#xff08;詐&a…

代碼隨想錄算法訓練營Day 42| 動態規劃part04 | 01背包問題理論基礎I、01背包問題理論基礎II、416. 分割等和子集

代碼隨想錄算法訓練營Day 42| 動態規劃part04 | 01背包問題理論基礎I、01背包問題理論基礎II、416. 分割等和子集 文章目錄 代碼隨想錄算法訓練營Day 42| 動態規劃part04 | 01背包問題理論基礎I、01背包問題理論基礎II、416. 分割等和子集01背包問題理論基礎一、01背包問題二、…

WSL設置啟動時自動啟動docker服務或其他服務

方式一: Windows系統的WSL,當windows關機再開機后,WSL等于是重新開機的,默認情況下,不會啟動Docker服務。例如在Ubuntu 22.04中,需要使用命令 service docker start來啟動。由于我習慣關機斷電,因此每天開機打開WSL后都要手動輸入這個命令,非常麻煩。所以找了一個方法…

Redis教程——哨兵

在上篇文章我們學習了Redis教程——主從復制&#xff0c;這篇文章我們學習Redis教程——哨兵監控。 在主從復制中如果主機發生宕機&#xff0c;從機Redis會一直等到主機的恢復&#xff0c;這樣會導致只能進行讀操作&#xff0c;不能進行寫操作&#xff0c;這大大降低了系統的高…

資料同化 | 搭建docker環境-1

Community Gridpoint Statistical Interpolation (GSI) system DTC 是一個分布式設施&#xff0c;NWP 社區可以在這里測試和評估用于研究和操作的新模型和技術。 DTC的目標包括&#xff1a; 鏈接研究和操作社區 研究成果轉化為實際操作的速度 加快改善天氣預報 開發和測試有…

Cocos Creator 3.8.x 透明帶滾動功能的容器

ScrollView 是一種帶滾動功能的容器 1、刪除ScrollView下Sprite組件的SpriteFrame 2、ScrollView下scrollBar的Sprite組件的Color設為&#xff1a;FFFFFF00 3、ScrollView下view的Graphics組件的FillColor設為&#xff1a;FFFFFF00