C++set關聯式容器

C++set

1. 關聯式容器

vector、list、deque、forward_list(C++11)等STL容器,其底層為線性序列的數據結構,里面存儲的是元素本身,這樣的容器被統稱為序列式容器。而map、set是一種關聯式容器,關聯式容器也是用來存儲數據的,與序列式容器不同的是,關聯式容器里面存儲的是<key, value>結構的鍵值對,在數據檢索時比序列式容器效率更高。map和set的鍵是唯一的,但是mutimap和multiset支持多個同名且有不同映射的鍵共存。

2. 鍵值對

用來表示具有一一對應關系的一種結構,該結構中一般只包含兩個成員變量key和value, key代表鍵值,value表示與key對應的信息。比如:學生的姓名和他的學號是一一對應的,那么就可以通過查找學生的姓名來查找到對應的學號。set容器是Key結構。set不允許存在相同的key(multiset除外),且key不可修改(因為會破壞內部的紅黑樹結構)。

3.set容器

形參含義:

T:鍵值對應value的類型
Compare:比較器的類型,缺省情況下按照小于來比較,一般情況下(內置類型元索)該參數不需要傳遞,如果無法比較時(自定義類型),需要用戶自己顯式傳遞比較規則(一般情況下按照函數指針或者仿函數來傳遞)
Alloc:通過空間配置器來申請底層空間,不需要用戶傳遞,除非用戶不想使用標準庫提供的空間配置器

4.set的成員函數

4.1 map的成員函數介紹

set的構造:

函數聲明功能介紹
sets()構造一個空的set

set的迭代器:

函數聲明功能介紹
begin()end()begin:首元素的位置;end:下一個元素的位置
cbegin()cend()c指const,cbegin和cend指向的內容不能修改
rbegin()rend()反向迭代器,rbegin從end開始,rend從begin開始,其++和–的方向相反
crbegin()crend()與前一個功能相同,但指向的內容不能修改

set的容量與元素訪問:

函數名函數聲明功能介紹
emptybool empty() const檢測set中的元素是否為空,為空返回ture,不為空返回false
sizesize_type size() const返回set中有效元素的個數

set的修改:

函數名函數聲明功能介紹
insertpair<iterator,bool> insert (const value_type& val)在set中插入鍵值對x,注意x是一個鍵值對,返回值也是鍵值對;iterator代表新插入元素的位置,bool代表插入成功
erasevoid erase (iterator position)刪除position位置上的元素
size_type erase (const value_type& val)刪除鍵值為x的元素
void erase (iterator first, iterator last)刪除**[first,last)**區間中的元素
swapvoid swap (set& x)交換兩個set中的元素
clearvoid clear()刪除set里所有的元素

set的比較:

函數名函數聲明功能介紹
key_comp
value_comp

set的操作:

函數名函數聲明功能介紹
finditerator find (const value_type& val) const搜索set里鍵等于k的元素,如果找到返回一個映射的迭代器,找不到返回end的迭代器,find函數默認查找中序的第一個相等的值
countsize_type count (const value_type& val) const搜索set里鍵等于k的元素,找到返回1,找不到返回0
lower_bounditerator lower_bound (const value_type& val) const在set里找>=k的元素,返回符合情況的最小鍵的迭代器
upper_bounditerator upper_bound (const value_type& val) const在set里找>k的元素,返回符合情況的最小鍵的迭代器
equal_rangepair<iterator,iterator> equal_range (const value_type& val) const

5. multimap和multiset

mutiset(map)相等的值可以在左孩子也可以在右孩子(會調整樹的結構,無所謂插在哪里)。

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

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

相關文章

深度盤點在當今經濟形勢下資深項目經理或PMO的或去或從

在當今經濟形勢下&#xff0c;資深項目經理&#xff08;Project Manager&#xff09;或項目管理辦公室&#xff08;PMO&#xff09;的去向和選擇受到多種因素的影響。以下是對他們可能面臨的或去或從的深度盤點&#xff1a; 1、發展去向 1. 深化專業領域&#xff1a;在經濟形勢…

Linux程序開發(一):Linux基礎入門安裝和實操手冊

Tips&#xff1a;"分享是快樂的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不僅有知識的海洋&#x1f30a;&#xff0c;還有滿滿的正能量加持&#x1f4aa;&#xff0c;快來和我一起分享這份快樂吧&#x1f60a;&#xff01; 喜歡我的博客的話&#xff0c;記得…

CSAP_MAT_BOM_MAINTAIN 返回消息處理

CSAP_MAT_BOM_MAINTAIN是創建修改BOM的函數&#xff0c;但這個函數的返回參數中沒有消息返回。 需要在調用前使用函數&#xff1a; CALL FUNCTION CALO_INIT_APIEXPORTINGdata_reset_sign EXCEPTIONSlog_object_not_found 1log_sub_object_not_found 2other_e…

QT筆記 - QPainter 填充環形區域(甜甜圈)

以矩形為例&#xff1a; QPainter painter(this);// painter.setPen(Qt::blue);// painter.setFont(QFont("Arial",30));// painter.drawText(rect(),Qt::AlignCenter,"Hello Qt!!!");QRect rect QRect(50, 50, 400, 400);QRect box QRect(100, 100, 105…

TS-抽象類和靜態成員

目錄 1&#xff0c;抽象類1&#xff0c;為什么需要抽象類2&#xff0c;抽象成員3&#xff0c;設計模式-模板模式 2&#xff0c;靜態成員1&#xff0c;什么是靜態成員2&#xff0c;設計模式-單例模式 1&#xff0c;抽象類 1&#xff0c;為什么需要抽象類 有時&#xff0c;某個…

Java面試八股之Java中有哪些原子類,原理是什么

Java中有哪些原子類&#xff0c;原理是什么 AtomicInteger 和 AtomicLong&#xff1a; 用于對整數&#xff08;int&#xff09;和長整數&#xff08;long&#xff09;進行原子操作。 原理&#xff1a;它們內部封裝了一個整型或長整型變量&#xff0c;并通過使用Unsafe類提供…

HarmonyOS - 記一次HSP異常堆棧無法定位問題

問題背景 HSP混淆打包之后無法定位異常堆棧&#xff0c;問題堆棧為&#xff1a; MyModules/build/default/cache/default/defaultCompileArkTS/esmodule/release/MyModules/src/main/ets/d/r.ts:1:1 問題原因&#xff1a; 導致無法定位問題的原因是&#xff0c;混淆時開啟了代碼…

OpenHarmony 實戰開發——ArkUI容器類API介紹

容器類&#xff0c;顧名思義就是存儲的類&#xff0c;用于存儲各種數據類型的元素&#xff0c;并具備一系列處理數據元素的方法。在 ArkUI 開發框架中&#xff0c;容器類采用了類似靜態的語言來實現&#xff0c;并通過 NAPI 框架對外提供。通過對存儲位置以及屬性的限制&#x…

關于數據結構B+TREE 和 HASH的整理

一、BTREE BTree是一種樹數據結構&#xff0c;是B-Tree的變種&#xff0c;屬于n叉排序樹&#xff0c;每個節點通常有多個孩子。 BTree是和B-Tree相比&#xff0c;BTree的所有的數據都會出現在葉子節點上&#xff0c;并且葉子節點會形成一個單向鏈表&#xff0c;非葉子節點僅僅…

C++map容器關聯式容器

Cmap 1. 關聯式容器 vector、list、deque、forward_list(C11)等STL容器&#xff0c;其底層為線性序列的數據結構&#xff0c;里面存儲的是元素本身&#xff0c;這樣的容器被統稱為序列式容器。而map、set是一種關聯式容器&#xff0c;關聯式容器也是用來存儲數據的&#xff0…

日期問題,

日期問題 ac代碼 #include <cstdio> #include <iostream>using namespace std;int days[13] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool check_valid(int year, int month, int day) {if (month 0 || month > 12) return false;if (day 0) …

【開發】模型部署筆記

目錄 模型量化 模型量化 1、模型量化優點 低精度模型表示模型權重數值格式為FP16&#xff08;半精度浮點&#xff09;或者INT8&#xff08;8位定點整數&#xff09;&#xff0c;但是目前低精度往往就指代INT8。常規精度模型則一般表示模型權重數值格式為FP32&#xff08;32位…

求數組最大值

#include <bits/stdc.h> using namespace std; int main(){int a[4]{1,2,3,4};cout<<*max_element(a,a4);return 0; }

策略模式詳解

策略模式 1 概述 先看下面的圖片&#xff0c;我們去旅游選擇出行模式有很多種&#xff0c;可以騎自行車、可以坐汽車、可以坐火車、可以坐飛機。 作為一個程序猿&#xff0c;開發需要選擇一款開發工具&#xff0c;當然可以進行代碼開發的工具有很多&#xff0c;可以選擇Idea進…

JavaScript的跳轉傳參方式

在JavaScript中&#xff0c;頁面跳轉并傳遞參數通常可以通過幾種不同的方式來實現。下面是一些常見的方法&#xff1a; 1.URL參數&#xff08;Query String&#xff09; 這是最常見的方式&#xff0c;通過在URL的末尾添加參數來實現。例如&#xff1a; javascriptwindow.loc…

gitlab webhook觸發jenkins任務

配置jenkins 安裝gitlab插件 配置jenkins job 選擇gitlab webhook觸發 在高級中生成token 代碼倉設置 新增webhook 配置webhook 測試連接 缺點&#xff0c;不能帶gitLab事件的參數&#xff01;&#xff01;&#xff01;

Spark RDD案例:統計網站每月訪問量

這個項目利用Spark技術&#xff0c;通過統計網站訪問記錄中的日期信息&#xff0c;實現了對每月訪問量的統計和排序。通過分析數據&#xff0c;我們可以了解到不同月份的網站訪問情況&#xff0c;為進一步優化網站內容和推廣策略提供數據支持。 使用Spark統計網站每月訪問量 …

Apache2.4和PHP8的量子糾纏

Apache不建議你用&#xff0c;PHP建議使用

一種基于電場連續性的高壓MOSFET緊湊模型,用于精確表征電容特性

來源&#xff1a;A Compact Model of High-Voltage MOSFET Based on Electric Field Continuity for Accurate Characterization of Capacitance&#xff08;TED 24年&#xff09; 摘要 本文提出了一種新的高壓MOSFET&#xff08;HV MOS&#xff09;緊湊模型&#xff0c;以消…