2. 入門并實踐STL——set篇

set的常見用法詳解

  • 集合,自動內(nèi)部有序且不含重復(fù)元素的容器蒿秦。
  • 使用環(huán)境
    • 去掉重復(fù)元素
    • 元素比較大或者類型不是int而不能直接開散列表
    • 自動排序
  1. How to use?
    #include<set>
    using namespace std;
    
  2. set的定義
    • 單獨定義一個set:set<typename> name;
    • set數(shù)組的定義: set<typename> nameArray[size];
  3. 訪問元素
    除開vector和string之外的stl容器都不支持*(it+1)的訪問方式
  4. 常用函數(shù)解析
    • insert(x): O(logN)头朱,自動遞增排序和去重
    • find(value): 返回set中對應(yīng)值為value的迭代器,O(logN)
    set<int> st;
    set<int>::iterator it = st.find(2);
    printf("%d", *it);
    // 也可以
    printf("%d", *st.find(2));
    
    • erase(): 刪除單個元素,刪除一個區(qū)間內(nèi)的元素

      • 刪除單個元素
        1. erase(it): it為所需要刪除的迭代器绸栅,O(1).可以結(jié)合find(value)來使用。 例:st.erase(st.find(5));
        2. erase(value): value為所需要刪除的元素页屠。O(logN)

      • 刪除一個區(qū)間的元素
        - st.erase(first, last)刪除[first, last), O(last-first)

    • size(), O(1)

    • clear(), O(n

  • 主要作用
    • 自動去重按升序排序
  • 延伸:
    • set中元素是唯一的粹胯,如果需要處理不唯一的情況,則需要使用multiset辰企。另外风纠,c++11標準中還增加了unordered_set,以散列替代set內(nèi)部的紅黑樹實現(xiàn),使其可以用來處理去重但不排序的需求牢贸,速度比set要快得多

相關(guān)習(xí)題

#include<iostream>
#include<set>
#include<vector>
#include<algorithm>
using namespace std;

int main() {
    int N;
    scanf("%d", &N);
    vector<set<int> > nums(N+1);
    for(int i = 1; i <= N; i++) {
        int M;
        scanf("%d", &M);
        for(int j = 0; j < M; j++) {
            int num;
            // printf("[i: %d]", i);
            scanf("%d", &num);
            nums[i].insert(num);
        }
    }
    //
    int K;
    scanf("%d", &K);
    for(int a = 0; a < K; a++) {
        int x, y;
        scanf("%d%d", &x, &y);
        int wholesize = nums[x].size() + nums[y].size();
        set<int> tmp;
        for(set<int>::iterator it1 = nums[x].begin(); it1 != nums[x].end(); it1++) {
            tmp.insert(*it1);
        }
        for(set<int>::iterator it2 = nums[y].begin(); it2 != nums[y].end(); it2++) {
            tmp.insert(*it2);
        }
        int completesize = tmp.size();
        int commonsize = wholesize - completesize;
        printf("%.1f%%\n", (float(commonsize)/completesize) * 100);
    }
    return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末竹观,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子潜索,更是在濱河造成了極大的恐慌臭增,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竹习,死亡現(xiàn)場離奇詭異誊抛,居然都是意外死亡,警方通過查閱死者的電腦和手機由驹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門芍锚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔓榄,你說我怎么就攤上這事并炮。” “怎么了甥郑?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵逃魄,是天一觀的道長。 經(jīng)常有香客問我澜搅,道長伍俘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任勉躺,我火速辦了婚禮癌瘾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饵溅。我一直安慰自己妨退,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咬荷,像睡著了一般冠句。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幸乒,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天懦底,我揣著相機與錄音,去河邊找鬼罕扎。 笑死聚唐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的壳影。 我是一名探鬼主播拱层,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宴咧!你這毒婦竟也來了根灯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤掺栅,失蹤者是張志新(化名)和其女友劉穎烙肺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氧卧,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡桃笙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沙绝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搏明。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闪檬,靈堂內(nèi)的尸體忽然破棺而出星著,到底是詐尸還是另有隱情,我是刑警寧澤粗悯,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布虚循,位于F島的核電站,受9級特大地震影響样傍,放射性物質(zhì)發(fā)生泄漏横缔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一衫哥、第九天 我趴在偏房一處隱蔽的房頂上張望茎刚。 院中可真熱鬧,春花似錦撤逢、人聲如沸斗蒋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泉沾。三九已至,卻和暖如春妇押,著一層夾襖步出監(jiān)牢的瞬間跷究,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工敲霍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俊马,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓肩杈,卻偏偏與公主長得像柴我,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扩然,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • C++ STL 這是我學(xué)習(xí)標準模板整理的一些知識點 vector常見用法 vector翻譯為向量艘儒,是一種可以容納同...
    liangjiayu閱讀 346評論 0 0
  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語閱讀 3,665評論 0 7
  • 十八.STL庫 主要包括三大組件:容器、算法夫偶、迭代器界睁。 容器:序列式容器:vector、deque兵拢、list翻斟;關(guān)聯(lián)...
    b83dcb2e8b71閱讀 955評論 0 2
  • STL部分 1.STL為什么廣泛被使用 C++ STL 之所以得到廣泛的贊譽,也被很多人使用说铃,不只是提供了像vec...
    杰倫哎呦哎呦閱讀 4,323評論 0 9
  • (萬維綱:高手)這本書访惜,當(dāng)初在逛羅輯思維淘寶店時,買充值卡的時候無意中看到的 當(dāng)初第一眼掃過的時候腻扇,债热,從書面的設(shè)計...
    007_許閱讀 2,742評論 0 3