C++中集合的使用

在 C++ 中,集合通常指的是標準模板庫(STL)中的 std::setstd::unordered_set。這兩個都是用來存儲不重復元素的容器,但在實現和使用方式上有一些區別。

1.?std::set

  • 基于紅黑樹實現,元素按照嚴格的順序(默認是升序)排列。
  • 插入、查找、刪除操作的平均時間復雜度為 O(log n)。
  • 不支持直接修改元素的值,但可以通過刪除再插入的方式來實現。
  • 用法示例:
#include <iostream>
#include <set>int main() {std::set<int> mySet;// 插入元素mySet.insert(3);mySet.insert(1);mySet.insert(4);mySet.insert(2);// 查找元素if (mySet.find(3) != mySet.end()) {std::cout << "3 存在于集合中" << std::endl;}// 刪除元素mySet.erase(4);// 遍歷集合for (int x : mySet) {std::cout << x << " ";}std::cout << std::endl;return 0;
}

2.?std::unordered_set

  • 基于哈希表實現,元素無序存儲。
  • 插入、查找、刪除操作的平均時間復雜度為 O(1)。
  • 元素類型必須支持哈希函數,或者提供自定義的哈希函數。
  • 用法示例:
    #include <iostream>
    #include <unordered_set>int main() {std::unordered_set<int> mySet;// 插入元素mySet.insert(3);mySet.insert(1);mySet.insert(4);mySet.insert(2);// 查找元素if (mySet.find(3) != mySet.end()) {std::cout << "3 存在于集合中" << std::endl;}// 刪除元素mySet.erase(4);// 遍歷集合for (int x : mySet) {std::cout << x << " ";}std::cout << std::endl;return 0;
    }
    

    無論使用 std::set 還是 std::unordered_set,都需要包含 <set><unordered_set> 頭文件,并且在編譯時鏈接 STL 庫。這些集合提供了強大的功能,可以方便地實現很多常見的數據結構和算法。

3.要判斷一個元素是否在集合中

,你可以使用集合的 find() 函數。這個函數會返回一個迭代器,如果找到了元素,則返回指向該元素的迭代器;如果未找到,則返回集合的 end() 迭代器。下面是一個示例:

#include <iostream>
#include <set>int main() {std::set<int> mySet = {1, 2, 3, 4, 5};int element = 3;// 使用find()函數判斷元素是否在集合中auto it = mySet.find(element);if (it != mySet.end()) {std::cout << element << " 存在于集合中" << std::endl;} else {std::cout << element << " 不在集合中" << std::endl;}return 0;
}

ps:

對于 std::set 中的 end(),它返回的是指向集合中最后一個元素之后的位置。通常在使用 find() 函數查找元素時,如果找不到目標元素,find() 函數會返回 end() 指向的位置,表示找不到目標元素。因此,我們通常會將 find() 函數的返回值與 end() 迭代器進行比較,以判斷是否找到了目標元素。

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

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

相關文章

Llama 3沒能逼出GPT-5!OpenAI怒“卷”To B戰場,新企業級 AI 功能重磅推出!

Meta 是本周當之無愧的AI巨星&#xff01;剛剛推出的 Llama 3 憑借著強大的性能和開源生態的優勢在 LLM 排行榜上迅速躍升。 按理說&#xff0c;Llama 3在開源的狀態下做到了 GPT-3.7 的水平&#xff0c;必然會顯得用戶&#xff08;尤其是企業用戶&#xff0c;他們更具備獨立部…

指令中常用的7種尋址方式z

指令中的尋址方式就是對指令中的地址字段進行解釋&#xff0c;以獲得操作數的方法或獲得程序轉移地址的方法。常用的尋址方式有&#xff1a; 立即尋址&#xff1a;操作數就包含在指令中。直接尋址&#xff1a;操作數存放在內存單元中&#xff0c;指令中直接給出操作數所在存儲…

C#調用HttpClient.SendAsync報錯:System.Net.Http.HttpRequestException: 發送請求時出錯。

C#調用HttpClient.SendAsync報錯&#xff1a;System.Net.Http.HttpRequestException: 發送請求時出錯。 var response await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);問題出在SSL/TLS&#xff0c;Windows Server 2012不支持…

先進制造aps專題八 基于ai大模型的ai超級應用,ai生管

目前正在研發的面向消費者的ai超級應用有ai文員&#xff0c;ai教師&#xff0c;ai家教&#xff0c;ai護士&#xff0c;ai翻譯 而ai生管無疑是面向制造業的ai超級應用 從商業角度來說&#xff0c;ai生管&#xff0c;必然是aps公司必然要研發的ai超級應用

Grafana 路徑遍歷所有路徑 CVE-2021-43798漏洞預警

簡介? ?Grafana是一個跨平臺、開源的數據可視化網絡應用程序平臺。用戶配置連接的數據源之后&#xff0c;Grafana可以在網絡瀏覽器里顯示數據圖表和警告。 漏洞危害等級 高危 CVE 編號? CVE-2021-43798 FOFA查詢 ?app"Grafana" ?zoomeyes查詢 ?app:"gr…

Vue3解決“找不到模塊“@/components/xxx.vue”或其相應的類型聲明”

文章目錄 前言背景問題描述解決方案總結 前言 在使用 Vue 3 開發項目時&#xff0c;遇到“找不到模塊 ‘/components/xxx.vue’ 或其相應的類型聲明”的錯誤是一個常見問題。這通常與 TypeScript 和模塊解析相關的配置不當有關。本文將詳細介紹如何解決此問題&#xff0c;確保…

2024-6-遙遠的救世主

2024-6-遙遠的救世主 2024-4-18 豆豆 fatux&#xff1a; 2021.5.26 看完電視劇《天道》之后購買本書&#xff0c;斷斷續續一直沒有讀完。 非常好奇&#xff0c;一個什么樣的作者能寫出如此奇書。老丁&#xff0c;一個智者&#xff0c;智者是多么孤獨&#xff0c;因為找不到同…

信息安全等級保護測評: 登陸日志

文章目錄 引言I 登錄日志表結構設計II 日志處理2.1 封裝日志入庫2.2 收集登陸信息2.3 查詢接口引言 等保測評是信息安全等級保護測評的簡稱,是對信息和信息載體按照重要性等級分級別進行檢測、評估的過程。 背景:近期AIS監控平臺(網頁版)等保測評,發現沒有登陸日志,現要…

從用法到源碼再到應用場景:全方位了解CompletableFuture及其線程池

文章目錄 文章導圖什么是CompletableFutureCompletableFuture用法總結API總結 為什么使用CompletableFuture場景總結 CompletableFuture默認線程池解析&#xff1a;ForkJoinPool or ThreadPerTaskExecutor&#xff1f;ForkJoinPool 線程池ThreadPerTaskExecutor線程池Completab…

Qt 界面上字體自適應控件大小 - 隨控件縮放

Qt 界面上字體自適應控件大小 - 隨控件縮放 引言一、設計思路二、進階版大致思路三、參考鏈接 引言 Qt控件自適應字體大小可以用adjustSize()函數&#xff0c;但字體自適應控件大小并沒有現成的函數可調. - 本文實現了按鈕上的字體隨按鈕大小變化而變化 (如上圖所示) - 其他控件…

Spring MVC+mybatis 項目入門:旅游網(三)用戶注冊——控制反轉以及Hibernate Validator數據驗證

個人博客&#xff1a;Spring MVCmybatis 項目入門:旅游網&#xff08;三&#xff09;用戶注冊 | iwtss blog 先看這個&#xff01; 這是18年的文章&#xff0c;回收站里恢復的&#xff0c;現階段看基本是沒有參考意義的&#xff0c;技術老舊脫離時代&#xff08;2024年辣鐵鐵&…

澳大利亞.德國-門戶媒體投放通稿:需要注意什么地方

概述 在現代社會&#xff0c;新聞媒體的投放成為企業和組織宣傳推廣的重要手段之一。澳大利亞和德國作為全球重要的經濟和科技中心&#xff0c;其新聞媒體也備受關注。本文將介紹澳大利亞和德國的一些主要新聞媒體&#xff0c;并討論發表新聞稿時需要注意的地方。 澳大利亞媒…

streamlit 學習

表情網站 https://getemoji.com/ 官網&#xff1a; https://streamlit.io/ 文檔 https://docs.streamlit.io/develop/api-reference/chat/st.chat_message 安裝&#xff1a; pip install streamlit啟動 以下的python 文件指寫streamlit 程序的腳步。 1、先切換目錄到Pyth…

VMware虛擬機-設置系統網絡IP、快照、克隆

1.設置網絡IP 1.點擊右上角開關按鈕-》有線 已連接-》有線設置 2.手動修改ip 3.重啟或者把開關重新關閉開啟 2.快照設置 快照介紹&#xff1a; 通過快照可快速保存虛擬機當前的狀態&#xff0c;后續可以使用虛擬機還原到某個快照的狀態。 1.添加快照(需要先關閉虛擬機) 2.在…

[JAVASE] 類和對象(六) -- 接口(續篇)

目錄 一. Comparable接口 與 compareTo方法 1.1 Comparable接口 1.2 compareTo方法的重寫 1.2.1 根據年齡進行比較 1.2.2 根據姓名進行比較 1.4 compareTo 方法 的使用 1.3 compareTo方法的缺點(重點) 二. Comparator接口 與 compare方法 2.1 Comparator接口 2.2 compare 方法…

藍橋杯算法心得——李白打酒(加強版)

大家好&#xff0c;我是晴天學長&#xff0c;記憶化搜索&#xff0c;找到技巧非常重要&#xff0c;需要的小伙伴可以關注支持一下哦&#xff01;后續會繼續更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 2) .算法思路 1.memo三維表示記錄的結果 3&#xff09;.算法步驟 1…

slint esp32 tokio

源碼&#xff1a;https://github.com/xiaguangbo/slint_esp32_tokio cpu 是 esp32c2&#xff0c;屏幕是 ili9341&#xff0c;觸摸是 xpt2046&#xff0c;使用 spi 半雙工 不使用DMA&#xff08;esp-rs還沒支持&#xff09;&#xff0c;SPI 40M&#xff0c;240*320全屏刷新為1.5…

python文件IO之pickle 模塊讀寫對象數據

可以向一個文件中寫入字符串&#xff0c;讀取后也是讀取字符串形式&#xff0c;但是不能直接向文件中寫入像列表這樣的對象&#xff0c;需要 pickle 等模塊才行。 pickle 模塊介紹 pickle 模塊使用強大且有效的算法來進行序列化和反序列化。 序列化是指將一個對象轉換為能夠存…

前端面試手冊

前端面試手冊 崗位職責&#xff1a; 1&#xff0e;熟悉公司業務&#xff0c;能獨立高效高質地完成任務&#xff0c;負責功能的開發、測試、上線、維護&#xff1b; 2&#xff0e;負責推動、優化前端基礎架構、組件抽象&#xff0c;提升開發效率&#xff1b; 3&#xff0e;關…

四. TensorRT模型部署優化-模型部署的基礎知識

目錄 前言0. 簡介1. FLOPS2. TOPS3. HPC的排行&#xff0c;CPU/GPU比較4. FLOPs5. FLOPS是如何計算的6. CUDA Core vs Tensor Core總結參考 前言 自動駕駛之心推出的 《CUDA與TensorRT部署實戰課程》&#xff0c;鏈接。記錄下個人學習筆記&#xff0c;僅供自己參考 本次課程我們…