RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是set?

汽車電子技術(shù) ? 來源:C語言Plus ? 作者:Maye426 ? 2023-02-27 15:42 ? 次閱讀

一、什么是 set?

set 容器,又稱集合容器,即該容器的底層是以紅黑樹變體實現(xiàn)的,是典型的關(guān)聯(lián)式容器。這意味著,set 容器中的元素可以分散存儲在內(nèi)存空間里,而不是必須存儲在一整塊連續(xù)的內(nèi)存空間中。跟任意其它類型容器一樣,它能夠存放各種類型的對象。

二、容器特性

1.存儲結(jié)構(gòu)

set是由多個節(jié)點(二叉樹中的紅黑樹變體)組成的。

2.集合

set 容器不能在指定位置插入,意味著不支持at(pos)和[]操作。在set中查找元素,效率是非常高的

multiset與set的區(qū)別:set中的元素值唯一,每個元素只能出現(xiàn)一次;而multiset中同一元素可以出現(xiàn)多次。

3.雙向迭代器

不支持隨機訪問迭代器,只能從容器中第一個元素或最后一個元素開始遍歷容器,直到找到該位置。

三、基本函數(shù)實現(xiàn)

1,構(gòu)造函數(shù)

  • set();創(chuàng)建一個空set
  • set(const set&);復(fù)制構(gòu)造函數(shù)
  • set(begin,end);復(fù)制[begin,end)區(qū)間內(nèi)的元素,到另一個set中

2.set插入

  • iterator insert(const T& x); 插入元素

3.set刪除

  • iterator erase(iterator it);刪除集合中迭代器指向元素
  • iterator erase(iterator first,iterator last);刪除集合中[first,last)中元素
  • size_type erase(const key_type& elem); 刪除指定的元素
  • void clear();清空集合中所有元素

4.查找函數(shù)

  • iterator set.find(elem); //查找elem元素,返回指向elem元素的迭代器。

  • size_type set.count(elem); //返回容器中值為elem的元素個數(shù)。對set來說,要么是0,要么是1。對multiset來說,值可能大于1。

  • iterator set.lower_bound(elem); //返回第一個>=elem元素的迭代器。

  • iterator set.upper_bound(elem); // 返回第一個>elem元素的迭代器。

  • reverse_iterator rbegin();反向迭代器,指向最后一個元素

  • pair set.equal_range(elem); //返回一對迭代器,這兩個迭代器分別用于指向set中大于指定元素的第一個元素,以及等于或大于指定元素的第一個元素。

    equal_range返回值pair是什么?

    • pair.second是pair里面的第二個值,是T2類型。
    • pair.first是pair里面的第一個值,是T1類型。
    • pair存放的兩個值的類型,可以不一樣,如T1為int,T2為float。T1,T2也可以是自定義類型。
    • pair譯為對組,實際上就是一個結(jié)構(gòu)體類型,有兩個成員。

5.判斷函數(shù)

  • bool empty() const;判斷容器中是否有元素,若無元素,則返回 true;反之,返回 false。

6.大小函數(shù)

  • int size() const;返回集合中元素的個數(shù)
  • int max_size() const;返回最大可允許的set元素數(shù)量值

7.其他函數(shù)

  • void swap(set&);交換兩個同類型集合的數(shù)據(jù)

四、基本用法

#include
#include
using namespace std;
int main()
{
  set<int> s;
  for (int i = 0; i < 10; i++)
  {
    s.insert(rand()%20);
  }
  for (set<int>::iterator it = s.begin(); it != s.end(); it++)
  {
    cout << *it << " ";
  }
  cout <<"\\nset size():"<< s.size() << endl;
  //輸出:0 1 2 4 7 9 14 18  為什么只輸出8個元素呢?
  //因為set只能存在唯一的元素,重復(fù)的會被丟掉
  //思考:為什么set里面的元素是有序的呢?
  //因為set是關(guān)聯(lián)式容器,會默認按照升序進行排列




  //如果找到,返回指向的迭代器,沒有找到返回end()迭代器,所以再輸出之前
  //需要判斷是否找到
  set<int>::iterator it1 = s.find(6);
  if (it1 != s.end())
  {
    cout << *it1 << endl;
  }
  //如果set中有等于4的元素,則返回指向4的迭代器,如果沒有返回第一個
  //大于4的元素的迭代器,沒有找到返回end()迭代器
  it1 = s.lower_bound(4);
  if (it1 != s.end())
  {
    cout << *it1 << endl;
  }
  //如果set中有大于4的元素,返回第一個大于4的元素的迭代器,沒有找
  //到返回end()迭代器
  it1 = s.upper_bound(4);
  if (it1 != s.end())
  {
    cout << *it1 << endl;
  }
  cout <<"------------------我是 C語言Plus 華麗分割線"<
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3019

    瀏覽量

    74003
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    495

    瀏覽量

    22060
  • SET
    SET
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    7949
收藏 人收藏

    評論

    相關(guān)推薦

    C++之set/multiset容器

    set/multiset容器又稱為關(guān)聯(lián)式容器,底層是通過二叉樹實現(xiàn)。set/multiset容器在插入數(shù)據(jù)時就會做排序處理,默認是從小到大的順序。其中set容器允許插入重復(fù)數(shù)據(jù),multiset則不做此限制。
    的頭像 發(fā)表于 07-17 09:43 ?522次閱讀
    C++之<b class='flag-5'>set</b>/multiset容器

    不同創(chuàng)建線程安全Set的方式

    方法。 使用ConcurrentHashMap工廠方法構(gòu)造線程安全的HashSet 首先, 我們來看看_ConcurrentHashMap_暴露出來的靜態(tài)方法 -- newKeySet() 。此方法返回一個Set的實例,等同于實現(xiàn)了
    的頭像 發(fā)表于 09-25 14:20 ?652次閱讀

    MP3set1_48

    MP3set1_48ite
    發(fā)表于 04-04 23:26 ?34次下載

    RoHS認證證書樣本-SET證書

    RoHS認證證書樣本-SET證書
    發(fā)表于 08-12 11:48 ?49次下載
    RoHS認證證書樣本-<b class='flag-5'>SET</b>證書

    RoHS認證中文報告樣本-SET報告

    RoHS認證中文報告樣本-SET報告
    發(fā)表于 08-12 11:49 ?74次下載
    RoHS認證中文報告樣本-<b class='flag-5'>SET</b>報告

    金融網(wǎng)絡(luò)中的SET 技術(shù)

    SET 協(xié)議為網(wǎng)上交易提供了安全技術(shù),使參加交易的各方對網(wǎng)上交易增強了信心,因而大大推動了金融網(wǎng)絡(luò)的發(fā)展。本文在論述SET 技術(shù)原理的同時,還給出了應(yīng)用案例。
    發(fā)表于 09-25 16:22 ?10次下載

    SET協(xié)議的一種改進方案

    SET協(xié)議在電子商務(wù)交易中的應(yīng)用越來越廣泛,本文通過對SET協(xié)議的分析,發(fā)現(xiàn)存在的一些缺陷,并在此基礎(chǔ)上提出了一個改進方案,增強了該協(xié)議非否認性、公平性、隱私性等方面的性能,
    發(fā)表于 03-02 11:45 ?7次下載

    雙柵極SET與MOSFET的混合特性

    用電阻噪聲確定一個低噪聲放大器的特性,由SET 的周期振蕩特性和MOSFET 的閾值電壓特性可構(gòu)成雙柵極SET/MOSFET 通用方波電路[8],它是構(gòu)成邏輯門電路的基本單元
    發(fā)表于 09-30 11:08 ?1654次閱讀
    雙柵極<b class='flag-5'>SET</b>與MOSFET的混合特性

    ADS-ARM_set相關(guān)資料

    ADS-ARM_set相關(guān)資料,有需要的下來看看
    發(fā)表于 08-16 18:54 ?0次下載

    IAR-ARM_set相關(guān)資料

    IAR-ARM_set相關(guān)資料,有需要的下來看看
    發(fā)表于 08-16 18:54 ?6次下載

    set_max_delay被覆蓋的解決辦法

    XDC描述的時序約束是有優(yōu)先級的,尤其是涉及到時序例外的約束,如set_clock_groups、set_false_path、set_max_delay和set_multicycle
    的頭像 發(fā)表于 09-07 10:53 ?9905次閱讀
    <b class='flag-5'>set</b>_max_delay被覆蓋的解決辦法

    vivado多時鐘周期約束set_multicycle_path使用

    Vivado下set_multicycle_path的使用說明 vivado下多周期路徑約束(set_multicycle_path)的使用,set_multicycle_path一般...
    發(fā)表于 12-20 19:12 ?1次下載
    vivado多時鐘周期約束<b class='flag-5'>set</b>_multicycle_path使用

    python之集合set的基本步驟分享

    區(qū)別就是remove的元素在set當中沒有的話會報錯,而discard不會
    的頭像 發(fā)表于 08-23 10:31 ?2166次閱讀

    逆變器-XC7SET04

    逆變器-XC7SET04
    發(fā)表于 02-14 18:39 ?0次下載
    逆變器-XC7<b class='flag-5'>SET</b>04

    python中的set類型

    Python中的set類型是一種無序、可變的集合數(shù)據(jù)類型,它的主要特點是不允許重復(fù)元素的存在。本文將詳盡、詳實、細致地介紹set類型的使用場景、常用操作以及與其他類型的比較等方面,以幫助讀者全面了解
    的頭像 發(fā)表于 11-21 16:25 ?868次閱讀
    RM新时代网站-首页