set和multiset集合容器

三、①set集合容器

簡介:set集合的目的就是為了快速檢索。set集合容器實現了紅黑樹的平衡二叉檢索樹的數據結構。set集合里面不允許有重復的元素出現;使用set容器前,需要在程序的頭文件中聲明 #include < set >。

函數方法總結:

1,元素的插入與中序遍歷 insert();
2,元素的反向遍歷,使用反向迭代器reverse_iterator,可以反向遍歷集合,其中rbegin()和rend()這兩個方法,分別給出了反向遍歷的開始位置和結束位置。
3,元素的刪除
?刪除set中迭代器所指的一個元素或一段區間中的所有元素 erase();
?一次性刪除set中的所有元素 clear();
4,元素的檢索,若找到查找的鍵值,則返回該鍵值的迭代器位置,否則返回集合最后一個元素后面的一個位置及end() find();
5,自定義比較函數

1,set容器中元素的插入與中序遍歷
#include <iostream>
#include<set>
using namespace std;int main()
{//set集合容器默認的比較規則下,是按元素由小到大插入set<int> s; //定義元素類型為int類型的集合對象s,當前沒有任何元素s.insert(1);    //第一次插入1這個元素s.insert(0);s.insert(4);s.insert(1);    //第二次插入1,重復元素,不會插入set<int> :: iterator it;    //定義前向迭代器it//使用前向迭代器對集合中序遍歷,其結果正好是元素排序的結果for(it=s.begin();it!=s.end();it++){cout << *it <<" ";}//輸出結果:0 1 4        從小到大排序,如果是前向迭代器迭代輸出直接默認升序排列輸出return 0;
}
2,元素的反向遍歷
#include <iostream>
#include<set>
using namespace std;int main()
{set<int> s; //定義元素類型為int類型的集合對象s,當前沒有任何元素s.insert(1);    //第一次插入1這個元素s.insert(0);s.insert(4);s.insert(1);    //第二次插入1,重復元素,不會插入set<int> :: reverse_iterator it;    //定義反向迭代器itfor(it=s.rbegin();it!=s.rend();it++){cout << *it <<" ";}//輸出結果:4 0 1        反向迭代輸出,不排序,僅僅反向輸出而已return 0;
}
3,元素的刪除
#include <iostream>
#include<set>
using namespace std;int main()
{//set集合容器默認的比較規則下,是按元素由小到大插入set<int> s; //定義元素類型為int類型的集合對象s,當前沒有任何元素s.insert(1);    //第一次插入1這個元素s.insert(0);s.insert(4);s.insert(1);    //第二次插入1,重復元素,不會插入s.erase(0);		//刪除鍵值為0的那個元素set<int> :: iterator it;    //定義前向迭代器it//使用前向迭代器對集合中序遍歷,其結果正好是元素排序的結果for(it=s.begin();it!=s.end();it++){cout << *it <<" ";}//輸出結果:1 4        前向迭代輸出cout <<endl;s.clear();  // 清空set集合s里面的所有元素cout<<s.size()<<endl;//輸出結果為:0return 0;
}
4,元素的檢索
#include <iostream>
#include<set>
using namespace std;int main()
{set<int> s ;s.insert(0);s.insert(1);s.insert(2);s.insert(3);s.insert(4);s.insert(5);s.insert(6);set <int> ::iterator it;    //定義前向迭代器itit=s.find(4);   //找4這個元素if(it!=s.end()) //若沒到末尾之前找到了{cout << *it <<endl;     //輸出該值}//輸出結果: 4else{cout << "not find it"<<endl;    //沒找到輸出 not find it}return 0;
}
5,自定義比較函數

?如果元素不是結構體,那么可以編寫比較函數

#include <iostream>
#include<set>
using namespace std;struct myComp
{//C++ const 允許指定一個語義約束,編譯器會強制實施這個約束,允許程序員告訴編譯器某值是保持不變的。如果在編程中確實有某個值保持不變,就應該明確使用const,這樣可以獲得編譯器的幫助。 bool beyond(const int &a,const int &b)//自己定義比較函數,要求由大到小排序//自定義比較函數myComp,重載“()”操作符bool operator()(const int &a,const int &b){if(a!=b)return a>b;elsereturn a>b;}
};int main()
{set<int> s;s.insert(2);s.insert(4);s.insert(1);s.insert(8);s.insert(9);s.insert(8);    //第一次有8這個元素了,第二次不會再填進去set<int,myComp> :: iterator it;    //定義前向迭代器for(it=s.begin();it!=s.end();it++){cout << *it <<" ";}//輸出結果:1 2 4 8 9//??????有疑問??????按理說應該是 9 8 4 2 1cout<<endl;return 0;
}

?如果元素是結構體,那么可以直接把比較函數寫在結構體內

#include <iostream>
#include<set>
#include<string>
using namespace std;struct  Info{string name;float score;//按分數高低排序bool operator < (const Info &a) const   //重載“<”操作符,自定義排序規則{return a.score<score;   //按score由大到小排列,如果要由小到大,使用“>”即可}
};
int main()
{set<Info> s; //定義元素類型為Info結構體的集合對象s,當前沒有任何元素Info info;  //定義Info類型元素//插入三個元素info.name="wsq";info.score=100.0;s.insert(info);info.name="beyond";info.score=99.5;s.insert(info);info.name="yy";info.score=66.6;s.insert(info);set<Info> :: iterator it;for(it=s.begin();it!=s.end();it++){cout<<(*it).name<<":"<<(*it).score<<endl;}return 0;
}

三、②multiset多重集合容器

簡介:multiset和set一樣,也是使用紅黑樹來組織元素數據的,唯一不同的是,multiset允許重復的元素鍵值插入,而set則不允許。使用multiset集合容器的時候,需要在頭文件進行聲明 #include< set >。
函數方法總結

1,multiset元素的插入 insert();
2,元素的刪除
?刪除multiset對象中的某個迭代器位置上的元素、某段迭代器區間中的元素、鍵值等于某個值的所有重復元素,并返回刪除元素的個數 erase();
?一次性刪除multiset中的所有元素 clear();
3,查找元素,使用find()方法查找元素,若找到返回該元素的迭代器位置(若重復,則返回第一個元素重復元素的迭代器的位置);若沒有找到,則返回end()迭代器的位置。

1,multiset元素的插入與刪除
#include <iostream>
#include<set>
#include<string>
using namespace std;int main()
{multiset<string> ms;    //定義一個string類型的multiset集合容器 msms.insert("wsq");       //插入字符串ms.insert("1014");ms.insert("1202");ms.insert("wsq");ms.insert("1014");multiset<string>::iterator it;  //定義前向迭代器it,會對multiset集合容器里面的元素默認進行升序排列for(it=ms.begin();it!=ms.end();it++){cout<<*it<<" ";     //從輸出結果就可以看出multiset集合容器可以存儲重復的元素}//輸出結果:1014 1014 1202 wsq wsqcout << endl<<endl;int n = ms.erase("1014"); //刪除值為“1014”的所有重復元素,返回刪除元素的總數2cout << "all elements after deleted :"<<n<<endl;for(it=ms.begin();it!=ms.end();it++){cout << *it <<" ";}cout <<endl;ms.clear(); //刪除ms容器里面的所有元素cout << ms.size()<<endl;    //返回ms容器的長度return 0;
}

2,查找元素

#include <iostream>
#include<set>
#include<string>using namespace std;int main()
{multiset<string> ms;    //定義一個string類型的multiset集合容器 msms.insert("wsq");       //插入字符串ms.insert("1014");ms.insert("1202");ms.insert("wsq");ms.insert("1014");multiset<string>::iterator it;  //定義前向迭代器it,會對multiset集合容器里面的元素默認進行升序排列it = ms.find("wsq");    //查找"wsq"這個字符串if(it!=ms.end()){cout << *it <<endl; //查找到之后輸出}else{cout<<"not find it"<<endl;    //若沒有找打}it = ms.find("yy"); //查找"yy"字符串if(it!= ms.end())   //若找到{cout<<*it<<endl;}else    //若找不到{cout<<"not find it"<<endl;}//由于有“wsq”這個字符串,所有輸出“wsq”這個字符串,但是沒有“yy”這個字符串,所以輸出“not find it”//輸出結果:wsq (換行) not find itreturn 0;
}

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

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

相關文章

javascript獲取select的值全解

獲取顯示的漢字 document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 獲取數據庫中的id window.document.getElementById("bigclass").value 獲取select組分配的索引id window.docume…

Java File類void deleteOnExit()方法(帶示例)

文件類void deleteOnExit() (File Class void deleteOnExit()) This method is available in package java.io.File.deleteOnExit(). 軟件包java.io.File.deleteOnExit()中提供了此方法。 This method is used to delete the file or directory when the virtual machine termi…

FreeRTOS隊列

在實際應用中&#xff0c;我們會遇到一個任務或者中斷服務需要和另一個任務進行消息傳遞&#xff0c;FreeRTOS提供了隊列的機制來完成任務與任務、任務與中斷之間的消息傳遞。 0x01 隊列簡介 隊列是為了任務與任務、任務與中斷之間的通信而準備的&#xff0c;可以在任務與任務…

括號配對問題(C)

描述 現在&#xff0c;有一行括號序列&#xff0c;請你檢查這行括號是否配對。 輸入 第一行輸入一個數N&#xff08;0<N<100&#xff09;,表示有N組測試數據。后面的N行輸入多組輸入數據&#xff0c;每組輸入數據都是一個字符串S(S的長度小于10000&#xff0c;且S不是空串…

劇情介紹:“阿甘正傳”

阿甘是個智商只有75的低能兒。在學校里為了躲避別的孩子的欺侮&#xff0c;聽從一個朋友珍妮的話而開始“跑”。他跑著躲避別人的捉弄。在中學時&#xff0c;他為了躲避別人而跑進了一所學校的橄欖球場&#xff0c;就這樣跑進了大學。阿甘被破格錄取&#xff0c;并成了橄欖球巨…

java 方法 示例_Java集合syncedList()方法與示例

java 方法 示例集合類syncList()方法 (Collections Class synchronizedList() method) synchronizedList() method is available in java.util package. syncList()方法在java.util包中可用。 synchronizedList() method is used to return the synchronized view of the given…

FreeRTOS信號量---二值信號量

信號量可以用來進行資源管理和任務同步&#xff0c;FreeRTOS中信號量又分為二值信號量、計算型信號量、互斥信號量和遞歸互斥信號量。 0x01 二值信號量 二值信號量其實就是一個只有一個隊列項的隊列&#xff0c;這個特殊的隊列要么是滿的&#xff0c;要么是空的&#xff0c;任…

Linux 上 rpm包管理工具的基本使用

查詢是否安裝某個包&#xff1a;rpm -q 包名查詢所有已安裝的包&#xff1a;rpm -q a查詢未安裝包的文件信息&#xff1a;rpm -qilp 未安裝的包安裝包&#xff1a;rpm -i 包測試安裝包&#xff1a;rpm -i test 包刪除包&#xff1a;rpm -e 包名測試刪除包&#xff1a;rpm -e te…

ios 內存使用陷阱

在iphone開發過程中&#xff0c;代碼中的內存泄露我們很容易用內存檢測工具leaks 檢測出來&#xff0c;并一一改之&#xff0c;但有些是因為ios 的缺陷和用法上的錯誤&#xff0c;leaks 檢測工具并不能檢測出來&#xff0c;你只會看到大量的內存被使用&#xff0c;最后收到didR…

FreeRTOS軟件定時器

軟件定時器允許設置一段時間&#xff0c;當設置的時間達到后就執行指定的功能函數&#xff0c;被軟件定時器調用的功能函數叫做定時器的回調函數。軟件定時器的回調函數是在定時器服務任務中執行的&#xff0c;所以一定不能在回調函數中調用任何阻塞任務的API函數&#xff0c;比…

Java類class isAssignableFrom()方法及示例

類class isAssignableFrom()方法 (Class class isAssignableFrom() method) isAssignableFrom() method is available in java.lang package. isAssignableFrom()方法在java.lang包中可用。 isAssignableFrom() method is used to check whether the class or an interface den…

關于 列表實例

wss3.0工具中有個列表實例項目。此項目的作用是在自定義網站或自定義字段時使用默認值。也就是定義其默認的數據。 格式詳見微軟msdn&#xff1a;http://msdn.microsoft.com/zh-cn/library/ms478860.aspx轉載于:https://www.cnblogs.com/heavencloud/archive/2009/03/20/141793…

WP7之Application Bar控件

Microsoft.Phone.Shell命名空間中定義了ApplicationBar及其相關類&#xff08;ApplicationBarIconButton和ApplicationBarMenuItem&#xff09;&#xff0c;這些類派生自Object,并完全獨立于常規Silverlight編程中的DependencyObject,UIElement和FrameworkElement類層次結構。A…

TomCat使用以及端口號被占用的處理方法

一.HTTP協議 什么是HTTP協議 HTTP協議&#xff08;HyperText Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;是因特網上應用最為廣泛的一種網絡傳輸協議&#xff0c;所有的WWW文件都必須遵守這個標準。 HTTP請求 HTTP響應 2.如何處理端口被占用 方法一&#xff…

FreeRTOS事件標志組

使用信號量來同步的話&#xff0c;任務只能與單個事務或任務進行同步&#xff0c;有時候某個任務可能會需要與多個事件或任務進行同步&#xff0c;此時信號量就無能為力了&#xff0c;FreeRTOS為此提供了一個可選的解決方法&#xff0c;那就是事件標志組。 0x01 事件標志組 事…

FusionCharts等產品簡介

以前做柱狀圖、餅形圖等圖表都是根據數據繪制出來的靜態圖&#xff0c;偶然看到別人的一套系統&#xff0c;居然可以讓柱狀圖的柱子動畫般的逐個出現&#xff0c;效果還是很不錯的。不要跟我抬杠說不就是展現數據嘛&#xff0c;靜態圖表有什么不好&#xff0c;要知道用戶一般可…

c#foreach循環_C#| 使用foreach循環打印整數數組

c#foreach循環Given an integer array and we have to print its elements using "foreach loop" in C#. 給定一個整數數組&#xff0c;我們必須在C&#xff03;中使用“ foreach循環”打印其元素 。 Syntax for foreach loop: foreach循環的語法&#xff1a; fore…

Eclipse和Tomcat綁定并且將上傳資源到Tomcat上

步驟如下&#xff1a; 創建一個Dynamic Web Project&#xff08;圖一&#xff09; Target runtime 選擇Apache Tomcat v7.0版本&#xff08;圖二&#xff09; 切記要選擇 v7.0 和2.5 &#xff08;若沒有圖二選項見圖三&#xff09; 然后&#xff0c;點擊window --> Prefer…

淺析.NET平臺編程語言的未來走向

在去年的PDC2008召開期間&#xff0c;微軟逐步公開了圍繞.NET和編程語言的很多想法&#xff0c;據此我們可以饒有興趣地對.NET的未來預測一番。 .NET平臺以運行在通用語言運行時(Common Language Runtime&#xff0c;CLR)上的C#和VB.NET作為開端。CLR是通用語言架構(Common Lan…

FreeRTOS任務通知

從v8.2.0版本開始&#xff0c;FreeRTOS新增了任務通知這個功能&#xff0c;可以使用任務通知來代替信號量、消息隊列、事件標志組等這些東西&#xff0c;使用任務通知的話效率會更高。 任務通知在FreeRTOS是一個可選的選項&#xff0c;要使用任務通知的話就需要將宏configUSE_T…