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

歡迎訪問 生活随笔!

生活随笔

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

综合教程

set/multiset

發布時間:2023/12/13 综合教程 21 生活家
生活随笔 收集整理的這篇文章主要介紹了 set/multiset 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

set/multiset

特性
????set保證出現在set內的元素只出現一次,且按照字典序從小大到大排序

初始化

① 初始化一個集合

set<int> S;

② 復制一個集合

set <int > Ss(S);

求長度(時間復雜度為O(1))

set<int> s;
s.size();

判空(時間復雜度為O(1))

a.empty();

清空

a.clear();

刪除元素/插入元素

a.erase(1);  // 刪除為1的那個值   ,時間復雜度為O(logn )
a.erase(a.begin());  // 刪除set的第一個元素
a.erase(iterator::it1, iterator::it2);  // 刪除[it1, it2)
a.insert(1);  // 插入一個元素1

判斷一個數是否出現過

a.count(x);  // 判斷x是否在集合中出現過,如果出現過返回1,否則0

迭代器

a.begin();  // 第一個元素的迭代器
a.end();  // 最后一個元素的下一位的迭代器

遍歷

    1.迭代器遍歷
    for (set<int> ::iterator it = S.begin(); it != S.end(); ++it)
        cout << *it ;

    2. c++方式遍歷
    for (auto Si: S) cout << Si << ends;

查找(支持lower_bound() 和 upper_bound()操作)

set<int> S;
S.insert(1);
S.insert(2);
set <int> ::iterator it1 = S.lower_bound(2);
if (it1 != S.end()) cout << *it1;
else cout << 0;
set <int> ::iterator it2 = S.find(2);
S.erase(it2);

multiset的性質和set一樣,上面全是set的特性,而multiset在set的特性之上使得一個集合內可以出現多次同一個元素,multiset內的元素也是按照字典序排好序的

multiset <int> s;
s.insert(1);
s.insert(1);
for (auto si: s) cout << si << ends;

輸出

1 1

????在s.erase(int x)時,會刪除所有出現的x,時間復雜度為O(logn + k) (k為出現次數)

multiset <int> s;
s.insert(1);
s.insert(1);
s.erase(1);
cout << s.empty();

輸出

1

總結

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

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