日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

STL:set的使用

發布時間:2023/10/11 综合教程 114 老码农
生活随笔 收集整理的這篇文章主要介紹了 STL:set的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于set

set是以特定的順序存儲相異元素的容器。

set是關聯式容器,C++ STL中標準關聯容器set, multiset, map, multimap內部采用的就是一種非常高效的平衡檢索二叉樹:紅黑樹,也成為RB樹(Red-Black Tree)。RB樹的統計性能要好于一般平衡二叉樹,所以被STL選擇作為了關聯容器的內部結構。

查找、插入、刪除的時間復雜度都是O(logn)

一些特點:

1、在插入或賦初值時會自動排序(除非是unordered_set)

2、不能直接改變元素值,因為那樣會打亂原本正確的順序,要改變元素值必須先刪除舊元素,則插入新元素

3、不提供直接存取元素的任何操作函數,只能通過迭代器進行間接存取,而且從迭代器角度來看,元素值是常數

4、每次insert或者erase之后,以前保存的iterator不會失效(關聯式容器,只改變了一些指針的指向,原指針指向的內存沒變)(當然,直接erase保存的指針肯定改變了)

set中的模板函數

begin()    返回指向第一個元素的迭代器

end()       返回指向最后一個元素的后一個位置的迭代器

clear()    清空內容

size()     返回當前元素個數

count(key_value)  用來查找set中某個鍵值出現的次數,在set只可能為0或1

erase(key_value)       刪除鍵值為key_value的元素

erase(iterator)            刪除迭代器iterator指向的元素

erase(first,second)    刪除迭代器first和second之間的元素,[first,second)

find(key_value)          返回指向key_value的迭代器,如果沒有找到返回end()

insert(key_value)      將key_value插入到set中

lower_bound(key_value)    返回第一個大于等于key_value的迭代器

upper_bound(key_value)   返回第一個大于key_value的迭代器

equal_range(key_value)     返回一對迭代器,first等同于lower_bound,second_bound等同于upper_bound,即 [lower_bound,upper_bound)

//若set<int>a,b; vector<int>c

set_union(a.begin(),a.end(),b.begin(),b.end(),back_insert(c))                        并集

set_intersection(a.begin(),a.end(),b.begin(),b.end(),back_insert(c))        交集

set_difference(a.begin(),a.end(),b.begin(),b.end(),back_insert(c))          差集

set_symmetric_difference(a.begin(),a.end(),b.begin(),b.end(),back_insert(c)) 對稱差

//使用實例

//初始化set

//這個參考資料好少啊,自己嘗試了這幾種

 #include<cstdio>
#include<set>
using namespace std; int main()
{
int arr[] = { ,,,, }; //定義時賦初值
set<int>st1{,,,,};
set<int>st2 = { ,,,, };
set<int>st3(arr, arr + ); //先定義,后賦值
set<int>st4;
st4 = { ,,,, };
set<int>st5;
st5.insert(arr, arr + ); return ;
}

//基本操作

 #include<cstdio>
#include<set>
using namespace std; int main()
{
int arr[] = { , , , , , , , };
set<int>st(arr,arr + ); //遍歷
//不像vector,只能通過迭代器進行間接存取
for (set<int>::iterator it = st.begin(); it != st.end(); it++)
printf("%d ", *it);
printf("\n"); //查找
//未找到返回end()
set<int>::iterator it = st.find();
if(it != st.end()) printf("%d\n", *it); //插入
//返回值為pair<set<int>::iterator,bool>
st.insert(); st.insert(); //刪除
//不要去刪除不存在的元素
st.erase(); st.erase(); //計數,是否在集合中
if (st.count()) printf("In\n");
else printf("Out\n"); //上下界函數
set<int>::iterator it1 = st.lower_bound();
set<int>::iterator it2 = st.upper_bound(); //區間定位
pair<set<int>::const_iterator, set<int>::const_iterator>pr;
pr = st.equal_range();
if(pr.second != st.end()) printf("%d %d\n", *pr.first, *pr.second); for (set<int>::iterator it = st.begin(); it != st.end(); it++)
printf("%d ", *it);
return ;
}

//集合操作

 #include<cstdio>
#include<set>
#include<vector>
#include<iterator> //inserter函數定義在里面
#include<algorithm> //set_union,set_intersection等定義在里面
using namespace std; int main()
{
//若待處理的集合用vecter保存,必須確保無重復且有序
//若用vector保存結果,使用函數back_inserter(dest)
vector<int>v1 = { ,,,,, };
vector<int>v2 = { ,,,,,, };
vector<int>dest1;
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(dest1));
//set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(dest));
//set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(dest));
//set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(dest)); //若用set保存結果,使用函數inserter(dest,dest.begin())
set<int>dest2;
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(dest2, dest2.begin())); //若待處理的集合用set保存,可以無序重復(會自動去重、排序)
set<int>s1 = { ,,,,,,,, };
set<int>s2 = { ,,,,,, };
set<int>dest3;
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(dest3, dest3.begin())); return ;
}

參考資料:

1、http://www.cplusplus.com/reference/set/set/?kw=set

2、https://blog.csdn.net/changjiale110/article/details/79108447

3、https://blog.csdn.net/rocky_56X/article/details/81772646

4、https://blog.csdn.net/yang20141109/article/details/51782027

總結

以上是生活随笔為你收集整理的STL:set的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产美女作爱全过程免费视频 | 人操人 | av免费大片 | jizzjizz日本人| 色七七久久 | 久久撸视频 | 免费av国产 | 999综合网| 伊人久综合 | 激情av网站| 在线不卡日韩 | 久久久资源网 | 亚洲欧美日韩中文字幕在线观看 | 日日干天天操 | 精品午夜福利视频 | 欧美日韩精品一区二区三区视频播放 | 自拍偷拍视频网站 | 6680新视觉电影免费观看 | 伊人论坛 | 成人精品视频一区二区 | 亚洲a中文字幕 | 91av爱爱| jizz在线看 | 久久婷婷六月 | 成人免费看片在线观看 | 国产成人精品一区二区色戒 | 成人涩涩网站 | 天天看黄色 | 无码人妻aⅴ一区二区三区玉蒲团 | 婷婷激情小说网 | 国产白浆视频 | 欧美黄大片 | av一区二区三区在线观看 | 萌白酱一区二区 | 午夜亚洲国产 | 欧美日韩国产传媒 | 中文无码熟妇人妻av在线 | 成人乱码一区二区三区 | 在线免费观看黄视频 | 一级黄色片在线播放 | 亚洲精品视频在线播放 | wwwxxx国产| 日韩午夜网站 | 91免费网址 | 91久久在线 | xxxxx毛片 | 一区二区三区在线观看免费 | 无码久久av一区二区三区 | 久草资源网 | 波多野结衣亚洲天堂 | 亚洲色图综合在线 | 日日操日日干 | 福利网址在线观看 | 不用播放器看av | 99国产一区| 精品丰满少妇一区二区三区 | 激情亚洲| 日本免费三片在线播放 | 奇米色在线 | av黄色小说 | 五月天激情国产综合婷婷婷 | 久久色视频 | 久久婷婷综合色丁香五月 | 日批网站在线观看 | 黄色网在线免费观看 | 国产成人精品一区二区在线小狼 | 国产视频一区在线 | 国产精品aⅴ | 黄色片在哪看 | 精品成人久久 | 亚洲制服av | 一区二区在线免费观看 | 欧美一级免费观看 | 操操操操操操操操操 | 国产特黄大片aaaa毛片 | 激情欧美一区 | 欧美在线中文字幕 | 京香julia在线观看 | 熟女毛片 | 成人自拍视频网 | 激情文学av| 日本一区二区久久 | 黄色片在线免费 | av片网址 | 亚州一二区 | 浮妇高潮喷白浆视频 | jizzjizz在线观看 | 熟妇人妻一区二区三区四区 | 搞黄网站在线观看 | 日本在线中文字幕专区 | 91久久精品一区二区别 | 中文字字幕码一二三区 | 久久夜靖品2区 | 中文字幕亚洲日本 | 亚洲gay视频 | 青青草青娱乐 | 久久狠| 99r热 | 无码人妻aⅴ一区二区三区日本 |