C++學習 --set

目錄

1, 什么是set

2, 創建set

2-1, 標準數據類型

2-2, 自定義數據類型

2-3, 其他創建方式

3, 操作set

3-1, 賦值

3-2, 添加元素(insert)

?3-2-1, 添加元素(insert)

3-2-2-1, 標準數據類型

3-2-2-2, 自定義數據類型

3-3, 查詢

3-4, 查找(find)

3-4-1, 標準數據類型

3-4-2, 自定義數據類型

3-5, 獲取長度(size)

3-6, 統計元素數量(count)

3-7, 交換(swap)

3-7, 刪除元素(erase)

3-8, 清空元素(clear)

3-9, 判斷是否為空(empty)

4, multiset


1, 什么是set

C++中的一種容器數據類型, 也叫集合容器, 會對插入的數據進行自動排序

分為set和multiset, 前者不允許重復值, 后置允許

2, 創建set

通過set<數據類型> 對象名, 創建set, 數據類型可以是標準數據類型, 也可以是自定義類型

2-1, 標準數據類型

//指定容器中元素數據類型為string
set<string> s1;

2-2, 自定義數據類型

class Myclass
{
public:Myclass() {};Myclass(string name, int age) :m_name(name), m_age(age) {};string m_name;int m_age;
};Myclass m("aaa", 1);
//容器中元素的類型為Myclass
set<Myclass> s1;

2-3, 其他創建方式

Myclass m1("aaa", 1);
set<Myclass> s1;
//拷貝構造方式創建
set<Myclass> s2(s1);
//通過迭代器指定區間方式創建
set<Myclass> s3(s2.begin(), s2.end());

3, 操作set

3-1, 賦值

通過set<數據類型> 對象名2 = 對象名1, 進行賦值

set<Myclass> s1;
set<Myclass> s2 = s1;

3-2, 添加元素(insert)

?3-2-1, 添加元素(insert)

通過對象名.insert(值), 可向set中插入元素

3-2-2-1, 標準數據類型
set<string> s1;
//向set容器中插入字符串對象aaa
s1.insert("aaa");
3-2-2-2, 自定義數據類型
//仿函數,定義排序規則
class MyCompare
{
public:bool operator()(const Myclass m1, Myclass m2) const{return m1.m_name > m2.m_name;}
};Myclass m1("aaa", 1);
//插入自定義類型時,需要指定仿函數
set<Myclass, MyCompare> s1;
//向set容器中插入m1
s1.insert(m1);
//通過迭代器指定位置插入
s1.insert(s1.begin(), m2);

3-3, 查詢

通過for循環, 可遍歷set中的元素

class Myclass
{
public:Myclass() {};Myclass(string name, int age) :m_name(name), m_age(age) {};string m_name;int m_age;
};class MyCompare
{
public:bool operator()(const Myclass m1, Myclass m2) const{return m1.m_name > m2.m_name;}
};int main()
{Myclass m1("aaa", 1);Myclass m2("bbb", 1);set<Myclass, MyCompare> s1;s1.insert(m1);s1.insert(m2);for (set<Myclass>::iterator it = s1.begin(); it != s1.end(); it++){cout << "姓名:" << it->m_name << " 年齡:" << it->m_age << endl;}system("pause");return 0;
}

3-4, 查找(find)

通過對象名.find(元素), 獲取s1中的元素,?找到返回對應的迭代器,未找到返回s1.end()

3-4-1, 標準數據類型

set<string> s1;
s1.insert("aaa");
//通過s1.find(m1)查找s1中的m1元素, 找到返回對應的迭代器,未找到返回s1.end()
set<string>::iterator ret = s1.find("aaa1");if (ret != s1.end())
{cout << "存在" << endl;
}
else
{cout << "不存在" << endl;
}

3-4-2, 自定義數據類型

//通過s1.find(m1)查找s1中的m1元素, 找到返回對應的迭代器,未找到返回s1.end()
set<Myclass, MyCompare>::iterator ret = s1.find(m1);if (ret != s1.end())
{cout << "存在m1" << endl;
}
else
{cout << "不存在m1" << endl;
}

3-5, 獲取長度(size)

通過對象名.size(), 獲取set的元素個數

cout << s1.size() << endl;

3-6, 統計元素數量(count)

通過對象名.count(對象), 獲取set的元素個數

cout << s1.count(m1) << endl;

3-7, 交換(swap)

通過對象名1.swap(對象名2) 交換兩個set的元素, 兩個set的數據類型需要一致

s1.swap(s2);

3-7, 刪除元素(erase)

通過對象名.erase(迭代器位置), 刪除元素

//指定迭代器位置刪除元素
set<Myclass, MyCompare>::iterator it = s1.begin();
it++;
it++;
s1.erase(it);

3-8, 清空元素(clear)

通過對象名.clear(), 清空set元素

s1.clear();
//指定迭代器區間清空元素
s1.erase(s1.begin(), s1.end());

3-9, 判斷是否為空(empty)

通過對象名.empty(), 判讀set容器中元素是否為空, 為空返回1, 不為空返回0

cout << s1.empty() << endl;

4, multiset

multiset可插入重復的元素

int main()
{multiset<string> s1;s1.insert("m1");s1.insert("m1");s1.insert("m1");for (multiset<string>::iterator it = s1.begin(); it != s1.end(); it++){cout << *it << endl;}system("pause");return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160632.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160632.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160632.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL的樂觀鎖和悲觀鎖

1、樂觀鎖&#xff1a; 樂觀鎖在操作數據的時候&#xff0c;是保持一種樂觀的狀態&#xff0c;認為別的線程是不會同時修改數據的&#xff0c;所以是不會上鎖的&#xff0c;但是在更新的時候&#xff0c;會判斷一下在這個期間內是否有別的線程修改過數據。 主要的流程&#x…

規劃類3d全景線上云展館幫助企業輕松拓展海外市場

科技3D線上云展館作為一種基于VR虛擬現實和互聯網技術的新一代展覽平臺。可以在線上虛擬空間中模擬真實的展館&#xff0c;讓觀眾無需親自到場&#xff0c;即可獲得沉浸式的參觀體驗。通過這個展館&#xff0c;您可以充分、全面、立體展示您的產品、服務以及各種創意作品&#…

python運算符重載之成員關系和屬性運算

1 python運算符重載之成員關系和屬性運算 1.1 重載成員關系運算符 1.1.1 contains,iter,getitem python使用成員關系運算符in時&#xff0c; 按優先級調用方法&#xff1a;contains>iter>getitem&#xff1b; class MyIters:def __init__(self,value):self.datavalu…

2023年【安全生產監管人員】考試題及安全生產監管人員找解析

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 安全生產監管人員考試題參考答案及安全生產監管人員考試試題解析是安全生產模擬考試一點通題庫老師及安全生產監管人員操作證已考過的學員匯總&#xff0c;相對有效幫助安全生產監管人員找解析學員順利通過考試。 1、…

【樹莓派】Camera Module 使用

工具 RPI4RPI Camera Module 2 硬件安裝 直接插到板子的相機帶子插口上即可 使用前提 libcamera-hello運行這個命令能夠成功&#xff0c;否則需要裝相應的包 在 RPI4 上測試 libcamera-jpeg -o 00001.jpg -t 2000 --width 640 --height 480t 表示程序運行&#xff08;預…

SA8255 Q+A android 登錄QNX

需要工具busybox 130|gen4_gvm:/ # cd /data/ gen4_gvm:/data # ./busybox telnet 192.168.1.1Entering character mode Escape character is ^].QNX Neutrino (localhost) (ttyp0)login: root No home directory. Logging in with home "/". # 用戶名&#xff1a…

數據結構-棧的實現

1.棧的概念及結構 棧&#xff1a;一種特殊的線性表&#xff0c;其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂&#xff0c;另一端稱為棧底。棧中的數據元素遵守后進先出LIFO&#xff08;Last In First Out&#xff09;的原則。 壓棧&…

Matlab群體智能優化算法之海象優化算法(WO)

文章目錄 一、靈感來源二、算法的初始化三、GTO的數學模型Phase1&#xff1a;危險信號和安全信號Phase2&#xff1a;遷移&#xff08;探索&#xff09;Phase3&#xff1a;繁殖&#xff08;開發&#xff09; 四、流程圖五、偽代碼六、算法復雜度七、WO搜索示意圖八、實驗分析和結…

FreeRTOS列表和列表項

FreeRTOS內核調度使用了大量的列表&#xff08;list&#xff09;和列表項&#xff08;listitem&#xff09;數據結構。它的源碼中涉及到很多列表的操作&#xff0c;對于FreeRTOS來說&#xff0c;列表就是它最基礎的一部分&#xff0c;列表被用作FreeRTOS調度器使用&#xff0c;…

力扣.面試題 04.06. 后繼者(java 樹的中序遍歷)

Problem: 面試題 04.06. 后繼者 文章目錄 題目描述思路解題方法復雜度Code 題目描述 設計一個算法&#xff0c;找出二叉搜索樹中指定節點的“下一個”節點&#xff08;也即中序后繼&#xff09;。 如果指定節點沒有對應的“下一個”節點&#xff0c;則返回null。 思路 由于題…

lombok @Slf4j注解啥作用

Logger logger Logger.getLogger(Test.class); logger.debug("這是一個調試信息"); logger.info("這是一個info信息");log4j 使用分兩步 第一步&#xff1a;private final Logger logger LoggerFactory.getLogger(當前類名.class); 第二步&#xff1a;記…

Python開發運維:Celery連接Redis

目錄 一、理論 1.Celery 二、實驗 1.Windows11安裝Redis 2.Python3.8環境中配置Celery 三、問題 1.Celery命令報錯 2.執行Celery命令報錯 3.Win11啟動Celery報ValueErro錯誤 一、理論 1.Celery (1) 概念 Celery是一個基于python開發的分布式系統&#xff0c;它是簡單…

Linux 命令: cut 和 tr

1. 寫在前面 本文主要介紹&#xff1a;Linux "cut "和 “tr” 命令行實用程序概述&#xff1b; 公眾號&#xff1a; 滑翔的紙飛機 2. Linux 命令&#xff1a; cut “cut” 命令是一種命令行工具&#xff0c;允許我們剪切指定文件或管道數據的部分內容&#xff0c;并…

JSP內置對象

一、request對象 1、訪問請求參數 2、在作用域中管理屬性 3、獲取Cookie 4、解決中文亂碼 5、獲取客戶端信息 6、顯示國際化信息 是一個javax.servlet.http.HttpServletRequest對象 request封裝了用戶瀏覽器提交的信息&#xff0c;因此可以調用相應的方法可以獲取這些封…

優先經驗回放(prioritized experience replay)

prioritized experience replay 思路 優先經驗回放出自ICLR 2016的論文《prioritized experience replay》。 prioritized experience replay的作者們認為&#xff0c;按照一定的優先級來對經驗回放池中的樣本采樣&#xff0c;相比于隨機均勻的從經驗回放池中采樣的效率更高&…

UML建模圖文詳解教程——類圖

版權聲明 本文原創作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文參考資料&#xff1a;《UML面向對象分析、建模與設計&#xff08;第2版&#xff09;》呂云翔&#xff0c;趙天宇 著 類圖概述 類圖用來描述系統內各種實體的類型以及不同…

Unsupervised MVS論文筆記

Unsupervised MVS論文筆記 摘要1 引言2 相關工作3 實現方法 Tejas Khot and Shubham Agrawal and Shubham Tulsiani and Christoph Mertz and Simon Lucey and Martial Hebert. Tejas Khot and Shubham Agrawal and Shubham Tulsiani and Christoph Mertz and Simon Lucey and …

JAVA小游戲拼圖

第一步是創建項目 項目名自擬 第二部創建個包名 來規范class 然后是創建類 創建一個代碼類 和一個運行類 代碼如下&#xff1a; package heima; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import …

10、信息打點——APP小程序篇抓包封包XP框架反編譯資產提取

APP信息搜集思路 外在——抓包封包——資產安全測試 抓包&#xff08;Fiddle&茶杯&burp&#xff09;封包&#xff08;封包監聽工具&#xff09;&#xff0c;提取資源信息 資產收集——資源提取——ICO、MAD、hash——FOFA等網絡測繪進行資產搜集 外在——功能邏輯 內在…

國際版Amazon Lightsail的功能解析

Amazon Lightsail是一項易于使用的云服務,可為您提供部署應用程序或網站所需的一切,從而實現經濟高效且易于理解的月度計劃。它是部署簡單的工作負載、網站或開始使用亞馬遜云科技的理想選擇。 作為 AWS 免費套餐的一部分&#xff0c;可以免費開始使用 Amazon Lightsail。注冊…