c++ set/multiset容器

在C++標準庫中,set?和?multiset?是兩種非常有用的關聯容器,它們包含唯一元素(對于set)或可重復元素(對于multiset),并且默認情況下這些元素都是自動排序的。它們通過鍵(即存儲的元素本身)來存儲和檢索元素,因此這些容器中的元素都是唯一的(對于set)或者可以有重復的(對于multiset)。

以下是setmultiset的一些基本用法:

引入頭文件
#include <set>  
#include <iostream>
聲明和初始化
// 聲明set,自動對int類型元素排序  
std::set<int> s;  // 聲明multiset,允許int類型元素重復  
std::multiset<int> ms;  // 初始化  
std::set<int> s = {1, 2, 3, 4, 5};  
std::multiset<int> ms = {1, 2, 2, 3, 3, 3};
插入元素
s.insert(6);  
ms.insert(4);  
ms.insert(4); // 在multiset中,可以插入重復元素
查找元素
if (s.find(3) != s.end()) {  std::cout << "3 is in the set.\n";  
}  // 對于multiset,可以使用count方法來查找元素的數量  
size_t count_of_3 = ms.count(3);  
std::cout << "There are " << count_of_3 << " 3s in the multiset.\n";
遍歷元素
for (const auto& elem : s) {  std::cout << elem << " ";  
}  
std::cout << '\n';  for (const auto& elem : ms) {  std::cout << elem << " ";  
}  
std::cout << '\n';
刪除元素
s.erase(3); // 刪除set中的元素3(如果存在)  
ms.erase(4); // 刪除multiset中所有值為4的元素  // 也可以通過迭代器刪除元素  
auto it = ms.find(2);  
if (it != ms.end()) {  ms.erase(it); // 刪除迭代器指向的元素  
}
其他操作
  • size():返回容器中元素的數量。
  • empty():如果容器為空,則返回true
  • clear():刪除容器中的所有元素。
  • lower_bound(key)?和?upper_bound(key):返回指向不小于(大于)給定鍵的第一個元素的迭代器。這兩個函數對于實現范圍查找特別有用。
  • 這里詳細聲明 lower_bound(key) 和 upper_bound(key)
lower_bound(key)

lower_bound(key)函數返回一個迭代器,指向第一個不小于(即大于或等于)key的元素。如果key不在容器中,則返回指向容器中第一個大于key的位置的迭代器,如果容器中沒有任何元素大于key,則返回end()迭代器

upper_bound(key)

upper_bound(key)函數返回一個迭代器,指向第一個大于key的元素。如果key不在容器中,或者key是容器中的最后一個元素,則返回end()迭代器。

示例:

假設我們有一個multiset<int>容器ms,包含以下元素:1 2 2 3 4 4 4 5

std::multiset<int> ms = {1, 2, 2, 3, 4, 4, 4, 5};  auto lb = ms.lower_bound(3); // lb指向第一個不小于3的元素,即3  
auto ub = ms.upper_bound(3); // ub指向第一個大于3的元素,即4  // 遍歷[lb, ub)范圍內的元素  
for (auto it = lb; it != ub; ++it) {  std::cout << *it << ' '; // 輸出:3  
}  lb = ms.lower_bound(4); // lb指向第一個不小于4的元素,即4  
ub = ms.upper_bound(4); // ub指向第一個大于4的元素,即5  // 遍歷[lb, ub)范圍內的元素  
for (auto it = lb; it != ub; ++it) {  std::cout << *it << ' '; // 輸出:4 4 4  
}
  • 這兩個函數通常用于在有序容器中實現范圍查找,特別適用于需要查找一個鍵的多個相同值的情況(如在multiset中)。
  • 由于setmultiset是自動排序的,所以這些操作的時間復雜度都是對數級別的。

請注意,setmultiset的迭代器是穩定的,這意味著在插入或刪除元素時,不會使指向其他元素的迭代器失效(除了指向被刪除元素的迭代器)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16360.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16360.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16360.shtml

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

相關文章

異方差的Stata操作(計量114)

以數據集 nerlove.dta 為例&#xff0c;演示如何在 Stata 中處理異方差。 此數據集包括以下變量&#xff1a; tc ( 總成本 ) &#xff1b; q ( 總產量 ) &#xff1b; pl ( 工資率 ) &#xff1b; pk ( 資本的使用成本 ) &#xff1b; pf ( 燃料價格 ) &#xff1b; …

GESP等級大綱

CCF編程能力等級認證概述 CCF編程能力等級認證&#xff08;GESP&#xff09;為青少年計算機和編程學習者提供學業能力驗證的規則和平臺。GESP覆蓋中小學階段&#xff0c;符合年齡條件的青少年均可參加認證。C & Python編程測試劃分為一至八級&#xff0c;通過設定不同等級…

[自動駕駛技術]-6 Tesla自動駕駛方案之硬件(AI Day 2021)

1 硬件集成 特斯拉自動駕駛數據標注過程中&#xff0c;跨250萬個clips超過100億的標注數據&#xff0c;無論是自動標注還是模型訓練都要求具備強大的計算能力的硬件。下圖是特斯拉FSD計算平臺硬件電路圖。 1&#xff09;神經網絡編譯器 特斯拉AI編譯器主要針對PyTorch框架&am…

AI數據面臨枯竭

Alexandr Wang&#xff1a;前沿研究領域需要大量當前不存在的數據&#xff0c;未來會受到這個限制 Alexandr Wang 強調了 AI 領域面臨的數據問題。 他指出&#xff0c;前沿研究領域&#xff08;如多模態、多語言、專家鏈式思維和企業工作流&#xff09;需要大量當前不存在的數…

壓縮能力登頂 小丸工具箱 V1.0 綠色便攜版

平常錄制視頻或下載保存的視頻時長往往都很長&#xff0c;很多時候都想要裁剪、 截取出一些“精華片段”保留下來&#xff0c;而不必保存一整個大型視頻那么浪費硬盤空間… 但如今手機或電腦上大多數的視頻剪輯軟件&#xff0c;切割視頻一般都要等待很長時間導出或轉換&#…

【C語言回顧】編譯和鏈接

前言1. 編譯2. 鏈接結語 上期回顧: 【C語言回顧】文件操作 個人主頁&#xff1a;C_GUIQU 歸屬專欄&#xff1a;【C語言學習】 前言 各位小伙伴大家好&#xff01;上期小編給大家講解了C語言中的文件操作&#xff0c;接下來我們講解一下編譯和鏈接&#xff01; 1. 編譯 預處理…

H5掃描二維碼相關實現

H5 Web網頁實現掃一掃識別解析二維碼&#xff0c;就現在方法的npm包就能實現&#xff0c;在這個過程中使用過html5-qrcode 和 vue3-qr-reader。 1、html5-qrcode的使用 感覺html5-qrcode有點小坑&#xff0c;在使用的時候識別不成功還總是進入到錯誤回調中出現類似NotFoundExc…

Python怎樣將PDF拆分成多個文件

在 Python 中&#xff0c;你可以使用 PyPDF2 庫來拆分 PDF 文件。以下是一個簡單的示例&#xff0c;演示如何將一個 PDF 文件拆分為多個單頁 PDF 文件。 首先&#xff0c;你需要安裝 PyPDF2 庫。如果尚未安裝&#xff0c;可以使用以下命令進行安裝&#xff1a; pip install P…

天干物燥小心火燭-智慧消防可視化大屏,隱患防治于未然。

智慧消防可視化大屏通常包括以下內容&#xff1a; 1.實時監控&#xff1a; 顯示消防設備、傳感器、監控攝像頭等設備的實時狀態和數據&#xff0c;包括火災報警、煙霧報警、溫度報警等。 2.建筑結構&#xff1a; 顯示建筑物的結構圖和平面圖&#xff0c;包括樓層分布、消防通…

VLC播放器(全稱VideoLAN Client)

一、簡介 VLC播放器&#xff08;全稱VideoLAN Client&#xff09;是一款開源的多媒體播放器&#xff0c;由VideoLAN項目團隊開發。它支持多種音視頻格式&#xff0c;并能夠在多種操作系統上運行&#xff0c;如Windows、Mac OS X、Linux、Android和iOS等。VLC播放器具備播放文件…

特殊變量筆記3

輸入一個錯誤命令, 在輸出$? 特殊變量&#xff1a;$$ 語法 $$含義 用于獲取當前Shell環境的進程ID號 演示 查看當前Shell環境進程編號 ps -aux|grep bash輸出 $$ 顯示當前shell環境進程編號 小結 常用的特殊符號變量如下 特殊變量含義$n獲取輸入參數的$0, 獲取當前She…

hugging face筆記:PEFT

1 介紹 PEFT (Parameter-Efficient Fine Tuning) 方法在微調時凍結預訓練模型參數&#xff0c;并在其上添加少量可訓練的參數&#xff08;稱為適配器&#xff09;這些適配器被訓練用來學習特定任務的信息。這種方法已被證明在內存效率和計算使用上非常高效&#xff0c;同時能產…

線性模型--普通最小二乘法

線性模型 一、模型介紹二、用于回歸的線性模型2.1 線性回歸&#xff08;普通最小二乘法&#xff09; 一、模型介紹 線性模型是在實踐中廣泛使用的一類模型&#xff0c;該模型利用輸入特征的線性函數進行預測。 二、用于回歸的線性模型 以下代碼可以在一維wave數據集上學習參…

基于51單片機的超聲波液位測量與控制系統

基于51單片機液位控制器 &#xff08;仿真&#xff0b;程序&#xff0b;原理圖PCB&#xff0b;設計報告&#xff09; 功能介紹 具體功能&#xff1a; 1.使用HC-SR04測量液位&#xff0c;LCD1602顯示&#xff1b; 2.當水位高于設定上限的時候&#xff0c;對應聲光報警報警&am…

手機卡該地塊

package demo; package demo; public class Phonetest { public static void main(String[] args) { Phone pnew Phone(); p.brand"小米"; p.price1998.98; System.out.println(…

在業務開發中使用ElasticSearch的指導手冊

文章目錄 該業務為什么需要ElasticSearch? / 該業務需要ElasticSearch的核心功能是哪些&#xff1f;正確示例錯誤示例 如何快速驗證分詞是否能夠滿足業務需求&#xff1f;分詞不滿足&#xff0c;如何自定義分詞&#xff1f; 業務數據的字段類型映射是否合理&#xff1f;實踐中…

MySQL設置表自增步長

在MySQL數據庫管理中&#xff0c;自增字段&#xff08;AUTO_INCREMENT&#xff09;是一種常見且重要的功能&#xff0c;通常用于生成唯一的標識符&#xff08;如主鍵&#xff09;。然而&#xff0c;在多種應用場景下&#xff0c;默認的自增步長&#xff08;1&#xff09;可能無…

【InternLM實戰營第二期筆記】02:大模型全鏈路開源體系與趣味demo

文章目錄 00 環境設置01 部署一個 chat 小模型02 Lagent 運行 InternLM2-chat-7B03 浦語靈筆2 第二節課程視頻與文檔&#xff1a; https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 視頻和文檔內容基…

003 CentOS 7.9 mysql8.3.0安裝及配置

文章目錄 Windows PowerShell測試端口安裝及配置1. 下載MySQL安裝包2. 解壓安裝包3. 安裝MySQL4. 啟動MySQL服務5. 獲取并設置MySQL root密碼6. 創建數據庫7. 配置遠程連接&#xff08;可選&#xff09; 卸載mysql檢查并卸載已有的MySQL或MariaDB&#xff1a; https://download…