STL — set容器的使用詳解
set容器的使用詳解
其實map和set是一個爸爸 - 紅黑樹爸爸,只不過set力氣不夠,不像map那麼可以擁有一個主鍵(key)和實鍵(value).它只有一個鍵值並且set當中不能儲存相同的鍵值(set還具有強迫症). 其實map和set的區別差不多就完了. 他們的相同點,他們底層都是使用紅黑樹構造的這使得他們的查詢,插入,刪除的效率都非常的高. 並且他們都是有序的,這些都非常關鍵! 這是一個好的容器的標準.當然set的禁忌也和map一樣,set不能儲存無法比較大小的資料. 因為構建紅黑樹需要比較大小. 而且在set中儲存相同的鍵值 ,新的就會覆蓋久的.set的特性是,所有元素都會根據元素的鍵值自動被排序. 我們可以通過set的迭代器改變set的元素值嗎? 不行,因為set元素值就是其鍵begin | 返回一個迭代器,此迭代器指向set中的第一個元素。 |
cbegin | 返回一個常量迭代器,此迭代器指向set中的第一個元素。 |
cend | 返回一個迭代器,此迭代器指向set最後一個元素的下一個位置 |
clear | 清除set的所有元素。 |
crbegin | 返回一個常量迭代器,此迭代器指向反向set中的第一個元素。 |
crbegin | 返回一個常量迭代器,此迭代器指向反向set中的第一個元素。 |
crend | 返回一個常量迭代器,此迭代器指向反向set中最後一個元素之後的位置。 |
emplace | 將就地構造的元素插入到set。 |
emplace_hint | 將就地構造的元素插入到set,附帶位置提示。 |
empty | 如果set為空,則返回 true。 |
end | 返回一個迭代器,此迭代器指向set最後一個元素的下一個位置 |
erase | 從指定位置移除set中的元素或元素範圍。 |
find | 返回一個迭代器,此迭代器指向set中其鍵與指定鍵相等的元素的位置。 |
get_allocator | 返回集合中與給定值相等的上下限的兩個迭代器. |
insert | 將元素或元素範圍插入到set中的指定位置。 |
key_comp | 將返回一個用於元素鍵值比較的函式 |
lower_bound | 返回一個迭代器,此迭代器指向set中其鍵值等於或大於指定鍵的鍵值的第一個元素。 |
max_size | 返回set的最大長度。 |
rbegin | 返回一個迭代器,此迭代器指向反向set中的第一個元素。 |
rend | 返回一個迭代器,此迭代器指向反向set中最後一個元素之後的位置。 |
size | 返回set中的元素數量。 |
swap | 交換兩個set的元素。 |
upper_bound | 返回一個迭代器,此迭代器指向set中其鍵值大於指定鍵的鍵值的第一個元素。 |
訪問操作:
這裡我們需要掌握的函式有:begin,end,find,cbegin,cend.rbegin,rend,empty 因為這裡的rbegin,rend,cbegin.cend用法和begin和end用法相同,所以我們這裡使用begin作為示範.插入操作:
set<int> T;
//***1*** 最普通的插入方式
T.insert(2);
T.insert(3);
T.insert(4);
T.insert(5);
T.insert(6);
//插入元素
cout << "遍歷T的元素: " << " ";
set<int>::iterator it1 = T.begin();
while (it1 != T.end())
{
cout << *it1 << " ";
++it1;
}
cout << endl;
//***2*** 利用陣列集合插入
set<int> OtherSet;
int arr[10] = { 1, 2, 3, 4, 5 };
OtherSet.insert(arr, arr + 3);
cout << "遍歷OtherSet的元素: " << " ";
it1 = OtherSet.begin();
while (it1 != OtherSet.end())
{
cout << *it1 << " ";
++it1;
}
cout << endl;
//***3*** 利用迭代器區間進行插入
set<int> OtherSet2;
OtherSet2.insert(T.begin(), T.end());
cout << "遍歷OtherSet的元素: " << " ";
it1 = OtherSet2.begin();
while (it1 != OtherSet2.end())
{
cout << *it1 << " ";
++it1;
}
cout << endl;
執行結果:
刪除操作:
程式碼演示: set<int> T;
int arr[10] = { 1, 2, 3, 4, 6, 7 };
T.insert(arr, arr + 6);
cout << "遍歷T的元素: " << " ";
set<int>::iterator it1 = T.begin();
while (it1 != T.end())
{
cout << *it1 << " ";
++it1;
}
cout << endl;
//***1*** 找到節點迭代器然後刪除節點
set<int>::iterator it2 = T.find(2);
//先找到鍵值為2的迭代器,然後刪除該迭代器.
T.erase(it2);
cout << "遍歷T的元素: " << " ";
it1 = T.begin();
while (it1 != T.end())
{
cout << *it1 << " ";
++it1;
}
cout << endl;
//***2*** 刪除一個迭代器區間
it2 = T.find(3);
T.erase(it2, T.end());
//刪除3到set結束這段區間的所有元素.
cout << "遍歷T的元素: " << " ";
it1 = T.begin();
while (it1 != T.end())
{
cout << *it1 << " ";
++it1;
}
cout << endl;
//***3*** 終極大招 clear
T.clear();
cout << "遍歷T的元素: " << " ";
it1 = T.begin();
while (it1 != T.end())
{
cout << *it1 << " ";
++it1;
}
cout << endl;
執行結果:相關推薦
STL List容器詳解
List 容器 list是C++標準模版庫(STL,Standard Template Library)中的部分內容。實際上,list容器就是一個雙向連結串列,可以高效地進行插入刪除元素。 使用list容器之前必須加上<vector>標頭檔案:#inclu
C++ STL相關容器詳解
vector: 一種隨機訪問的陣列型別,他提供了對陣列元素的快速、隨機訪問,以及在序列尾部快速、隨機的插入和刪除 操作。它在需要時可以改變其大小,也就是說大小可變的向量,比較靈活。可取代C++語言本身提供的傳統陣列。提 供隨機儲存能力。操作尾端元素的速度最快。由於所
STL — set容器的使用詳解
set容器的使用詳解其實map和set是一個爸爸 - 紅黑樹爸爸,只不過set力氣不夠,不像map那麼可以擁有一個主鍵(key)和實鍵(value).它只有一個鍵值並且set當中不能儲存相同的鍵值(se
STL之vector容器詳解
vector 容器 vector是C++標準模版庫(STL,Standard Template Library)中的部分內容。之所以認為是一個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單的說:vector是一個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。 使用vector容器之前必須
STL 之 vector 容器詳解
vector是C++標準模版庫(STL,Standard Template Library)中的部分內容。之所以認為是一個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單的說:vector是一個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。 使用vector容器之前必須加上標頭檔案:#include&
Docker 容器詳解
docker duyuheng 容器 容器是 Docker 又一核心概念,簡單的說,容器是獨立運行的一個或一組應用,以及它們的運行態環境。對應的,虛擬機可以理解為模擬運行的一整套操作系統(提供了運行態環境和其他系統環境)和跑在上面的應用。本章將具體介紹如何來管理一個容器,包括創建、啟動和停止等。啟
Swoole Echo伺服器隨意搭建 及set函式詳解
<?php //Server Class Server { private $serv; /** * 連結swoole伺服器 * Server constructor. */ public function __construct()
C++ LIST容器詳解
STL之list容器詳解 List 容器 list是C++標準模版庫(STL,Standard Template Library)中的部分內容。實際上,list容器就是一個雙向連結串列,可以高效地進行插入刪除元素。 使用list容器之前必須加上<vector>標頭檔案:#in
C++容器詳解
什麼是容器 首先,我們必須理解一下什麼是容器,在C++ 中容器被定義為:在資料儲存上,有一種物件型別,它可以持有其它物件或指向其它對像的指標,這種物件型別就叫做容器。很簡單,容器就是儲存其它物件的對 象,當然這是一個樸素的理解,這種“物件”還包含了一系列處理“其它物件”的方法,因為這些方法在程式
併發容器的原理,7大併發容器詳解、及使用場景
併發容器的原理,7大併發容器詳解、及使用場景 http://youzhixueyuan.com/use-of-concurrent-containers.html 併發容器的由來 在Java併發程式設計中,經常聽到Java集合類,同步容器、併發容器,那麼他們有哪些具體分類,以及各自之間的
C++學習:list容器詳解(一)
list容器詳解 首先說說STL STL就是Standard Template Library,標準模板庫。這可能是一個歷史上最令人興奮的工具的最無聊
高併發之併發容器詳解(從入門到超神)
一、ConcurrentHashMap 在上面已經提到過ConcurrentHashMap,ConcurrentHashMap相比Hashtable能夠進一步提高併發性,其原理圖如下: HashMap,Hashtable與ConcurrentHashMap都是
collection array hashMap list set ConcurrentHashMap詳解
一、集合與陣列 陣列(可以儲存基本資料型別)是用來存現物件的一種容器,但是陣列的長度固定,不適合在物件數量未知的情況下使用。 集合(只能儲存物件,物件型別可以不一樣)的長度可變,可在多數情況下使用。 二、層次關係 Collection介面是集合類的根介
C++ STL string 用法詳解
一、string的初始化 首先,為了在程式中使用string型別,必須包含標頭檔案 <string>。如下: #include <string> 注意這裡不是string.h,string.h是C字串標頭檔案。 string類是一個模板類
docker容器詳解二:初識docker原理及命令
docker容器詳解二:初始docker原理及命令 docker原理 先來理解一下虛擬機器概念,廣義來說,虛擬機器是一種模擬系統,即在軟體層面上通過模擬硬體的輸入和輸出,讓虛擬機器的作業系統得以執行在
docker容器詳解三:第一個docker程式
新建一個docker 下面來通過命令成功執行一個容器 通過docker images/image ls/docker list/等命令來檢視映象。 命令顯示的分別是: 映象名 標籤(在映象名
Java Set集合詳解及Set與List的區別
Java中的Set集合是繼承Collection的介面,是一個不包含重複元素的集合。 下圖是Set集合的原始碼。 Set和List都是以介面都形式來進行宣告。Set主要包含三種存放資料型別都變數,分別是HashSet,LinkedHashSet,TreeSet
STL—queue(佇列)詳解
首先,在STL中queue&&stack其實並不叫容器(container),而是叫介面卡(adapter),他們是對容器的再封裝. 佇列queue: 佇列,簡稱對,是一種操作受限 的線
Spring-IOC容器詳解
(最近在看spring,看到黑馬視訊教程裡面有些東西寫的還不錯,就稍微整合了一些,跟大家分享一下! ) Spring作為一個在java界廣泛使用且評價頗高的一個開源框架,給我們提供了好多的功能,極大的方便了我們的開發。此處將介紹IOC容器和AOP概念。 IOC
STL中stack詳解
stack Stacks are a type of container adaptor, specifically designed to operate in a LIFO context