
?集合是按照特定順序存儲(chǔ)唯一元素的容器。
?在集合中,元素的值也標(biāo)識(shí)它(值本身就是鍵,類型為T),并且每個(gè)值必須是唯一的。集合中元素的值在容器中一次就不能修改(元素總是const),但可以從容器中插入或刪除它們。
?在內(nèi)部,集合中的元素總是按照由其內(nèi)部比較對(duì)象(Compare類型)指示的特定嚴(yán)格弱排序標(biāo)準(zhǔn)排序。
?在按鍵訪問(wèn)單個(gè)元素時(shí),Set容器通常比unordered_set容器慢,但它們?cè)试S基于順序?qū)ψ蛹M(jìn)行直接迭代。
?集合通常實(shí)現(xiàn)為二叉搜索樹(shù)。
?A. 頭文件: set
?B. 關(guān)鍵區(qū)分:
?集合容器set : 存儲(chǔ)唯一元素(值本身就是鍵,重復(fù)添加進(jìn)入無(wú)效) + 內(nèi)部集合有序(內(nèi)部元素對(duì)象是有序儲(chǔ)存的)
?集合容器multiset : 可以存儲(chǔ)多個(gè)重復(fù)元素(可以重復(fù)添加進(jìn)入集合當(dāng)中) + 內(nèi)部集合有序(內(nèi)部元素對(duì)象是有序儲(chǔ)存的)
?兩者核心區(qū)別點(diǎn)就只在于multiset可以重復(fù)存儲(chǔ)多個(gè)相同元素,而對(duì)于set來(lái)說(shuō)其內(nèi)部容器當(dāng)中的元素都是唯一不可重復(fù)的。
?C. 常用情景
?常用于數(shù)字問(wèn)題的計(jì)數(shù),去重,搜索等相關(guān)操作。

?set.begin() —— 返回容器頭部元素迭代器
?set.end() —— 返回容器尾部元素下一位置的迭代器
#include#includeusing namespace std;
int main(){sets; // 內(nèi)部有序
s.insert(1);s.insert(3);s.insert(2);
cout<< * s.begin()<< endl;
// 輸出結(jié)果 : 1
for(auto it = s.begin(); it != s.end(); it ++ ){cout<< * it<< ' ';
}
// 輸出結(jié)果 : 1 2 3
} 3.容量操作(Capacity)
?set.empty() —— 返回容器是否為空,為空返回True,否則為 false
?set.size() —— 返回容器內(nèi)部元素個(gè)數(shù)
?set.max_size() —— 返回容器大存儲(chǔ)容量
#include#includeusing namespace std;
int main(){sets;
s.insert(1);s.insert(3);s.insert(2);s.insert(1); // 插入元素
cout<< s.empty()<< endl;
// 輸出: 0(false),不為空
cout<< s.size()<< endl;
// 輸出: 3 , 因?yàn)閟et容器重復(fù)添加相同元素是無(wú)效的
cout<< s.max_size()<< endl;
// 輸出: 461168601842738790
multisetms;
ms.insert(1);ms.insert(3);ms.insert(2);ms.insert(1);
cout<< ms.size()<< endl;
// 輸出: 4 , multiset可以重復(fù)添加相同元素
}
4.修改操作(Modifiers)
?set.insert() —— 向容器當(dāng)中插入元素
?set.erase() —— 刪除容器當(dāng)中所有值為 x 的元素
?set.clear() —— 刪除容器當(dāng)中所有元素
?set.swap() —— 交換兩個(gè)容器當(dāng)中的元素
#include#includeusing namespace std;
int main(){multisetms, t; // 內(nèi)部有序
ms.insert(1);ms.insert(3);ms.insert(2);ms.insert(1);
for(auto it = ms.begin(); it != ms.end(); it ++ )
cout<< * it<< ' ';
// 輸出 : 1 1 2 3
cout<< '\n';
ms.erase(1); // 刪除所有元素 1
for(auto it = ms.begin(); it != ms.end(); it ++ )
cout<< * it<< ' ';
// 輸出 : 2 3
cout<< '\n';
swap(ms, t);// 元素內(nèi)部元素被交換
cout<< ms.size()<< ' '<< t.size()<< endl;
// 輸出 : 0 2
t.clear();
cout<< t.size()<< endl;
// 輸出 : 0 ,被清空
}
5.其余操作(Operation)
?set.find() —— 得到指定元素的迭代器,若不存在返回 end 迭代器
?set.count() —— 查找指定元素的個(gè)數(shù)
?set.lower_bound() —— 查找第一個(gè)大于等于元素x的迭代器位置,若不存在返回 end 迭代器
?set.upper_bound() —— 查找第一個(gè)大于元素x的迭代器位置,若不存在返回 end 迭代器
#include#includeusing namespace std;
int main(){multisetms, t;
sets;
ms.insert(1);ms.insert(3);ms.insert(2);ms.insert(1);
cout<< * ms.find(1)<< endl;
// 輸出 1
if(ms.find(5) == ms.end()) puts("不存在這個(gè)元素");
// 輸出 不存在這個(gè)元素
cout<< ms.count(1)<< endl;
// 輸出 2, 有兩個(gè)元素1
cout<< * ms.lower_bound(2)<
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁(yè)名稱:set容器總結(jié)(C++)-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://www.chinadenli.net/article2/dcdhoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、微信公眾號(hào)、關(guān)鍵詞優(yōu)化、標(biāo)簽優(yōu)化、搜索引擎優(yōu)化、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容