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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++语言基础 —— STL —— 容器与迭代器 —— set 与 multiset

發布時間:2025/3/17 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++语言基础 —— STL —— 容器与迭代器 —— set 与 multiset 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【概述】

set 和 multiset?是集合數據容器,通過鏈表進行組織,具體實現采用了紅黑樹的平衡二叉樹的數據結構,兩者均定義在 <set> 頭文件中,其會根據特定的規則,自動將元素排序。

兩者不同在于,set 不允許元素重復,而 multiset 允許元素重復。

在插入操作和刪除操作上比 vector 快,但查找或添加末尾的元素時會有些慢。

【定義】

定義:?set<type> setName、multiset<type> multisetName

  • set<type> s:產生一個空的 set/multiset,其中不含任何元素
  • set<type> s(op):以 op 為排序準則,生成一個 set/multiset
  • set<type> s1(s2):產生某個 set/multiset 的副本,所有元素均被復制
  • set<type> s(beg, end):以迭代器的區間 [beg; end] 內的元素產生一個 set/multiset
  • set<type> s(beg, end, op):以 op 為排序準則,利用迭代器的區間 [beg; end] 內的元素生成一個 set/multiset

默認情況下,由小到大排序,若想按照自己的方式排序,一般重載小于號

struct type{int x,y;bool operator < (const type &a) const{if(x!=a.x)return x<a.x;return y<a.y;} } set<type> s;

【基本操作】

對于 set<type> s 的基本操作有:

  • s.size():返回容器大小
  • s.empty():返回容器是否為空。
  • s.clear():清空容器
  • s.count(elem):返回元素值為?elem?的元素的個數
  • s.insert(elem) :加入一個?elem?副本,返回新元素位置
  • s.erase(elem):移除與?elem?元素相等的所有元素,返回被移除的元素個數

【迭代器操作】

對于?set<type> s 的迭代器 it 的操作有:

  • s.begin():返回一個雙向迭代器,指向第一個元素
  • s.end():返回一個雙向迭代器,指向最后一個元素的下一?個位置
  • s.erase(it):移除迭代器?it 所指位置上的元素,無返回值
  • s.lower_bound(elem):返回?elem?的第一個可安插的位置,即元素值?>= elem?的第一個元素位置
  • s.upper_bound(elem):返回?elem?的最后一個可安插的位置,即元素值 > elem?的第一個元素的位置

【自定義數據類型】

當要在 multiset 中存儲自定義數據類型時,除了要寫自定義類型的存儲結構外,還要寫一個比較函數 cmp 來告訴 multiset 如何去比較自定義類型。

struct?Node{int?x,y; }; struct cmp{bool operator()(const Node &a,const Node &b){if(a.x==b.x)return a.y<b.y;return a.x<b.x;} }; multiset<Node,cmp> s;

?

總結

以上是生活随笔為你收集整理的C++语言基础 —— STL —— 容器与迭代器 —— set 与 multiset的全部內容,希望文章能夠幫你解決所遇到的問題。

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