STL--求交集,并集,差集(set_intersection,set_union,set_difference)

在這里插入圖片描述


set_intersection(重要)

求兩個有序的序列的交集.
函數聲明如下:

template<class InputIterator1, class InputIterator2, class OutputIterator>OutputIterator set_intersection(InputIterator1 _First1, //容器1開頭InputIterator1 _Last1,  //容器2結尾(不包含)InputIterator2 _First2, //容器2開頭InputIterator2 _Last2,  //容器2結尾(不包含)OutputIterator _Result  //存放交集的容器);
template<class InputIterator1, class InputIterator2, class OutputIterator, class BinaryPredicate>OutputIterator set_intersection(InputIterator1 _First1, //容器1開頭InputIterator1 _Last1,  //容器2結尾(不包含)InputIterator2 _First2, //容器2開頭InputIterator2 _Last2,  //容器2結尾(不包含)OutputIterator _Result  //存放交集的容器BinaryPredicate _Comp   //自己提供的比較規則);

注意:
1.兩個容器的數據必須有序
2.這個函數允許重復值,如果需要保證數據唯一,最好使用set去重再得到交集

應用舉例
有兩組數據,請求出它們的交集

include <iostream>
#include <vector>
#include <algorithm>
using namespace std;void Show(const vector<int>& s)//輸出s的數據
{for (const auto& x : s)cout << x << " ";cout << endl;
}int main() {// 定義兩個初始集合vector<int> v1 = { 1, 12, 30, 4, 5,4 };vector<int> v2 = { 4, 5, 60, 17, 8,4 };cout << "v1:"; Show(v1); cout << "v2:"; Show(v2); sort(v1.begin(), v1.end());//必須要排序 sort(v2.begin(), v2.end()); // 計算交集的方法:使用 set_intersection函數 vector<int> v3;//保存交集 set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin())); //需要利用插入迭代器 // 輸出數據 cout << "v1和v2交集:"; Show(v3); return 0; 
}

如果需要去重,則代碼如下:


#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;void Show(const vector<int>& s)//輸出s的數據
{for (const auto& x : s)cout << x << " ";cout << endl;
}int main() {// 定義兩個初始集合vector<int> v1 = { 1, 12, 30, 4, 5,4 };vector<int> v2 = { 4, 5, 60, 17, 8,4 };cout << "v1:"; Show(v1);cout << "v2:"; Show(v2);set<int>s1{ v1.begin(),v1.end() };//去重,并自動排序set<int>s2{ v2.begin(),v2.end() };//去重,并自動排序// 計算交集的方法:使用 set_intersection函數vector<int> v3;//保存交集set_intersection(s1.begin(), s1.end(),s2.begin(), s2.end(),inserter(v3, v3.begin())); //需要利用插入迭代器// 輸出數據cout << "v1和v2交集:"; Show(v3);return 0;
}

set_union(重要)

求兩個有序集合的并集
函數聲明如下:

template<class InputIterator1, class InputIterator2, class OutputIterator>OutputIterator set_union(InputIterator1 _First1, //容器1開頭InputIterator1 _Last1,  //容器2結尾(不包含)InputIterator2 _First2, //容器2開頭InputIterator2 _Last2,  //容器2結尾(不包含)OutputIterator _Result  //存放并集的容器);
template<class InputIterator1, class InputIterator2, class OutputIterator, class BinaryPredicate>OutputIterator set_union(InputIterator1 _First1, //容器1開頭InputIterator1 _Last1,  //容器2結尾(不包含)InputIterator2 _First2, //容器2開頭InputIterator2 _Last2,  //容器2結尾(不包含)OutputIterator _Result  //存放并集的容器BinaryPredicate _Comp   //自定義比較規則);
注意:

注意:
1.兩個容器的數據必須有序
2.這個函數允許重復值,如果需要保證數據唯一,最好使用set去重再得到并集

應用舉例
有兩組數據,請求出它們的并集

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;void Show(const vector<int>& s)//輸出s的數據
{for (const auto& x : s)cout << x << " ";cout << endl;
}int main() {// 定義兩個初始集合vector<int> v1 = { 1, 12, 30, 4, 50 };vector<int> v2 = { 4, 50, 60, 17, 30 };cout << "v1:"; Show(v1);cout << "v2:"; Show(v2);sort(v1.begin(), v1.end());//必須要排序sort(v2.begin(), v2.end());// 計算并集的方法:使用 set_union函數vector<int> v3;//保存并集set_union(v1.begin(), v1.end(),v2.begin(), v2.end(),inserter(v3, v3.begin())); //需要利用插入迭代器// 輸出數據cout << "v1和v2并集:"; Show(v3);return 0;
}

set_difference(重要)

求兩個有序集合的差集
差集:是指兩個集合間的一種運算結果,它包含了屬于第一個集合但不屬于第二個集合的所有元素。
舉例來說,若集合 A = {1, 2, 3, 4},集合 B = {3, 4, 5, 6},則 A - B 的差集為 {1, 2},這是因為 1 和 2 只在集合 A 中出現,不在集合 B 中。
函數聲明如下:

template<class InputIterator1, class InputIterator2, class OutputIterator>OutputIterator set_difference(InputIterator1 _First1, //容器1開頭InputIterator1 _Last1,  //容器2結尾(不包含)InputIterator2 _First2, //容器2開頭InputIterator2 _Last2,  //容器2結尾(不包含)OutputIterator _Result  //存放差集的容器);
template<class InputIterator1, class InputIterator2, class OutputIterator, class BinaryPredicate>OutputIterator set_difference(InputIterator1 _First1, //容器1開頭InputIterator1 _Last1,  //容器2結尾(不包含)InputIterator2 _First2, //容器2開頭InputIterator2 _Last2,  //容器2結尾(不包含)OutputIterator _Result  //存放差集的容器BinaryPredicate comp    //自定義比較規則);
注意:
1.兩個容器的數據必須有序
2.這個函數允許重復值,如果需要保證數據唯一,最好使用set去重再得到差集

應用舉例
有兩組數據,請求出A-B的差集

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;void Show(const vector<int>& s)//輸出s的數據
{for (const auto& x : s)cout << x << " ";cout << endl;
}int main() {// 定義兩個初始集合vector<int> v1 = { 1, 12, 30, 4, 50 };vector<int> v2 = { 4, 50, 60, 17, 30 };cout << "v1:"; Show(v1);cout << "v2:"; Show(v2);sort(v1.begin(), v1.end());//必須要排序sort(v2.begin(), v2.end());// 計算差集的方法:使用 set_difference函數vector<int> v3;//保存差集set_difference(v1.begin(), v1.end(),v2.begin(), v2.end(),inserter(v3, v3.begin())); //需要利用插入迭代器// 輸出數據cout << "v1和v2差集:"; Show(v3);return 0;
}

本篇完!

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

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

相關文章

jenkins配置gitee源碼地址連接不上

報錯信息如下&#xff1a; 網上找了好多都沒說具體原因&#xff0c;最后還是看jenkins控制臺輸出日志發現&#xff1a; ssh命令執行失敗&#xff08;git環境有問題&#xff0c;可能插件沒安裝成功等其他問題&#xff09; 后面發現是jenkins配置git的地方git安裝路徑錯了。新手…

加入新數據預測,基于黏菌優化算法SMA優化SVM支持向量機回歸預測(多輸入單輸出)

加入新數據預測&#xff0c;基于黏菌優化算法SMA優化SVM支持向量機回歸預測&#xff08;多輸入單輸出&#xff09; 1.數據均為Excel數據&#xff0c;直接替換數據就可以運行程序。 2.所有程序都經過驗證&#xff0c;保證程序可以運行。 3.具有良好的編程習慣&#xff0c;程序…

cmake find_package 使用筆記

目錄 1 find_package2 config mode2.1 搜索的文件名2.2 搜索路徑 3 module mode3.1 搜索的文件名3.2 搜索路徑 參考 1 find_package 這是官方文檔 下面是學習總結&#xff1a; 首先是find_package的作用是什么&#xff1f;引入預編譯的庫。 find_package有兩種模式&#xff1a…

error executing init.py No module name “imp“ ida

在某論壇下了個IDA&#xff0c;打開報錯No module name “imp”&#xff0c;這是由于高版本python已經移除了imp&#xff0c;新版使用import importlib。 1、打開文件D:\IDA_Pro_7.7\python\3\ida_idaapi.py 2、替換import imp 為 import importlib。 3、替換IDAPython_LoadPr…

【LInux】從動態庫的加載深入理解頁表機制

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;個人主頁 &#xff1a;阿然成長日記 …

【MindSpore學習打卡】應用實踐-自然語言處理-基于RNN的情感分類:使用MindSpore實現IMDB影評分類

情感分類是自然語言處理&#xff08;NLP&#xff09;中的一個經典任務&#xff0c;廣泛應用于社交媒體分析、市場調研和客戶反饋等領域。本篇博客將帶領大家使用MindSpore框架&#xff0c;基于RNN&#xff08;循環神經網絡&#xff09;實現一個情感分類模型。我們將詳細介紹數據…

X86和ARM架構的服務器 的區別

X86和ARM架構的服務器各有其優缺點,并適用于不同的應用場景。 一、X86架構服務器的優缺點及應用場景: 優點: 1. 易于獲取和成本較低:X86服務器在市場上品牌和型號眾多,價格相對較低,適合中小型企業。 2. 處理能力強大:X86服務器通常具有強大的處理器性能,支持多核心…

CLIP-EBC:通過增強的逐塊分類,CLIP能夠準確計數

摘要 https://arxiv.org/pdf/2403.09281v1 CLIP&#xff08;Contrastive Language-Image Pretraining&#xff0c;對比語言-圖像預訓練&#xff09;模型在識別問題中表現出了卓越的性能&#xff0c;如零樣本圖像分類和對象檢測。然而&#xff0c;由于其固有的挑戰——即將計數…

Nettyの參數優化簡單RPC框架實現

本篇介紹Netty調優&#xff0c;在上篇聊天室的案例中進行改造&#xff0c;手寫一個簡單的RPC實現。 1、超時時間參數 CONNECT_TIMEOUT_MILLIS 是Netty的超時時間參數&#xff0c;屬于客戶端SocketChannel的參數&#xff0c;客戶端連接時如果一定時間沒有連接上&#xff0c;就會…

Spring Cloud 是什么?(Spring Cloud 組件介紹)

什么是 Spring Cloud&#xff1f; Spring Cloud 是微服務系統架構的一站式解決方案&#xff0c;是各個微服務架構落地技術的集合體&#xff0c;讓架構師、 開發者在使用微服務理念構建應用系統的時候&#xff0c; 面對各個環節的問題都可以找到相應的組件來處理&#xff0c;比…

二叉樹的遍歷算法:前序、中序與后序遍歷

在數據結構與算法中&#xff0c;二叉樹的遍歷是基礎且重要的操作之一&#xff0c;它允許我們按照某種順序訪問樹中的每個節點。常見的二叉樹遍歷方式有前序遍歷&#xff08;Preorder Traversal&#xff09;、中序遍歷&#xff08;Inorder Traversal&#xff09;和后序遍歷&…

React 19 競態問題解決

競態問題/競態條件 指的是&#xff0c;當我們在交互過程中&#xff0c;由于各種原因導致同一個接口短時間之內連續發送請求&#xff0c;后發送的請求有可能先得到請求結果&#xff0c;從而導致數據渲染出現預期之外的錯誤。 因為防止重復執行可以有效的解決競態問題&#xff0…

聊天廣場(Vue+WebSocket+SpringBoot)

由于心血來潮想要做個聊天室項目 &#xff0c;但是仔細找了一下相關教程&#xff0c;卻發現這么多的WebSocket教程里面&#xff0c;很多都沒有介紹詳細&#xff0c;代碼都有所殘缺&#xff0c;所以這次帶來一個比較完整得使用WebSocket的項目。 目錄 一、效果展示 二、準備工…

html+css+js圖片手動輪播

源代碼在界面圖片后面 輪播演示用的幾張圖片是Bing上的&#xff0c;直接用的幾張圖片的URL&#xff0c;誰加載可能需要等一下&#xff0c;現實中替換成自己的圖片即可 關注一下點個贊吧&#x1f604; 謝謝大佬 界面圖片 源代碼 <!DOCTYPE html> <html lang&quo…

內存對齊宏ALIGN的理解

內存對齊宏ALIGN的理解 在Android Camera HAL代碼中經常看到ALIGN這個宏&#xff0c;主要用來進行內存對齊&#xff0c;下面是v4l2_wrapper.cpp中ALIGN的一些定義 //v4l2_wrapper.cpp中內存分配進行對其的操作和定義#define ALIGN( num, to ) (((num) (to-1)) & (~(to-1)…

【Android】自定義換膚框架03之自定義LayoutInflaterFactory

AppCompatActivity是如何創建View的 Activity通過LayoutInflater解析出XmlLayout相關信息LayoutInflater內部維護了一個InflaterFactory對象InflaterFactory接口包含了一個onCreateView方法&#xff0c;用于創建View將解析出的Xml信息轉為AttributeSet&#xff0c;交給Inflate…

安全測試之使用Docker搭建SQL注入安全測試平臺sqli-labs

1 搜索鏡像 docker search sqli-labs 2 拉取鏡像 docker pull acgpiano/sqli-labs 3 創建docker容器 docker run -d --name sqli-labs -p 10012:80 acgpiano/sqli-labs 4 訪問測試平臺網站 若直接使用虛擬機&#xff0c;則直接通過ip端口號訪問若通過配置域名&#xff0…

PyQt多線程詳解

PyQt多線程是在PyQt框架中利用多線程技術來提高應用程序的響應性和性能的一種方法。下面將詳細說明PyQt多線程的基本概念、應用場景以及實現方式。 一、PyQt多線程的基本概念 在PyQt中&#xff0c;多線程指的是在單個程序實例內同時運行多個線程。每個線程都可以執行不同的任…

第十五章 Nest Pipe(內置及自定義)

NestJS的Pipe是一個用于數據轉換和驗證的特殊裝飾器。Pipe可以應用于控制器&#xff08;Controller&#xff09;的處理方法&#xff08;Handler&#xff09;和中間件&#xff08;Middleware&#xff09;&#xff0c;用于處理傳入的數據。它可以用來轉換和驗證數據&#xff0c;確…

【Linux進階】文件系統5——ext2文件系統(inode)

1.再談inode (1) 理解inode&#xff0c;要從文件儲存說起。 文件儲存在硬盤上&#xff0c;硬盤的最小存儲單位叫做"扇區"&#xff08;Sector&#xff09;。每個扇區儲存512字節&#xff08;相當于0.5KB&#xff09;。操作系統讀取硬盤的時候&#xff0c;不會一個個…