色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

C++之set/multiset容器

wang123a ? 來源:wang123a ? 作者:wang123a ? 2023-07-17 09:43 ? 次閱讀

1.set/multiset容器簡介

set/multiset容器又稱為關聯式容器,底層是通過二叉樹實現。set/multiset容器在插入數據時就會做排序處理,默認是從小到大的順序。其中set容器允許插入重復數據,multiset則不做此限制。

在前面介紹的string(字符串)、vector(單端數組)、deque(雙端數組)、statck(棧)、queue(隊列)、list(鏈表)都屬于順序容器。而set/multiset則是數組關聯式容器。

2.set/multiset構造函數和賦值

set容器支持默認構造、有參構造、拷貝構造三種方式。

set容器插入數據使用insert()函數。

set/multiset是一個關聯式容器,在插入數據時就會自動排序,底層實現原理是二叉樹
set不允許插入重復數據(插入重復數據會忽略)
multiset則可以插入重復數據

set/multiset構造函數
	默認構造:set t;
	有參構造:set(begin,end);
	拷貝構造函數set(const set &p);
set/multiset賦值:
	重載=: set &operator=(const set &p);
#include 
using namespace std;
#include 
void PrintSet(const set& p)
{
	for (set::const_iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{	
		cout & p)
{
	for (multiset::const_iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout  t1;
	//插入數據
	t1.insert(10);
	t1.insert(5);
	t1.insert(7);
	t1.insert(8);
	t1.insert(10);
	PrintSet(t1);
	cout t2(t1.begin(), t1.end());
	PrintSet(t2);
	cout t3(t2);
	PrintSet(t3);

	multisetmt1;
	mt1.insert(10);
	mt1.insert(5);
	mt1.insert(7);
	mt1.insert(8);
	mt1.insert(10);
	cout mt2 = mt1;//等號賦值
	PrintMultiset(mt2);
	
}
int main()
{ 
	test();
	system("pause");
}
wKgZomSyZGGAcYuBAANtACAfiRo987.png

3.set容器設置大小和互換元素


set/multiset大小設置:
	獲取元素個數:size()
	判斷容器是否為空empty();
	互換元素:swap()

#include 
using namespace std;
#include 
#if 1
void PrintSet(const set& p)
{
	for (set::const_iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout  t1;
	for (int i = 0; i < 5; i++)
	{
		int temp = rand() % 100;
		t1.insert(temp);
	}
	cout  t2;
	if (t2.empty())
	{
		cout t3;
	t3.swap(t2);
	cout 
wKgaomSyZMmAIPwcAAQ6UpWmRZs135.png

4.set容器設置大小和互換元素

insert()插入元素,可以插入單端數據,也可以插入一個區間數據。

erase()刪除元素,可以指定位置刪除,可以刪除所以相同的元素,也可以刪除一個區間范圍。

clear()清空容器。

set容器插入:
	insert(elem)  -->插入數據elem
	insert(begin,endl)--->插入區間
注意:set容器沒有push_back、push_front函數
set容器刪除:
	erase(elem);//刪除成員,相當于list容器的remove
	erase(begin,end);//刪除區間
	erase(pos);//指定位置刪除
	clear();//清空
#include 
using namespace std;
#include 
class Person
{
public:
	Person(string name, int age) :name(name), age(age) {
	}
	//setr容器由于插入數據時會對數據進行排序,所以需要重載"& p)
{
	for (set::iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout  t1;
	t1.insert(Person("小王",18));
	t1.insert(Person("小李", 18));
	t1.insert(Person("小李", 19));
	t1.insert(Person("小王", 18));
	PrintSet(t1);
	sett2;
	t2.insert(t1.begin(), t1.end());
	cout 
wKgZomSyZZeAfMTiAAS7catRMzQ171.png

5.查找和統計元素個數

find()函數查找元素,查找沖個返回該元素的位置迭代器,失敗返回end;

count()函數通過成員,返回個數。

set容器查找:
	set::iterator &find(elem)  -->查找成功返回該成員的迭代器,若不存在返回end()
set容器統計
	count(elem)  --->統計elem的個數
#include 
using namespace std;
#include 
class Person
{
public:
	Person(string name, int age) :name(name), age(age) {

	}
	bool operator& t)
{
	for (set::iterator ptr = t.begin(); ptr != t.end(); ptr++)
	{
		cout  t1;
	t1.insert(Person("小王", 18));
	t1.insert(Person("小李", 18));
	t1.insert(Person("小李", 19));
	t1.insert(Person("小王", 18));
	PrintSet(t1);
	
	auto ret= t1.find(Person("小李", 19));//此時auto ret等價于set::iterator ret;
	if (ret != t1.end())
	{
		cout ::iterator ptr = t.begin(); ptr != t.end(); ptr++)
	{
		cout  mt;
	mt.insert(Person("小王", 18));
	mt.insert(Person("小李", 18));
	mt.insert(Person("小李", 19));
	mt.insert(Person("小王", 18));
	PrintMultiset(mt);
	cout 
wKgZomSyZlCAGEUXAATxDQkkc6w160.png

6.set和multiset區別

set和multiset區別:
set不可以插入重復數據,insert插入數據時有返回值。返回類型為隊組pair,該返回值返回的是插入數據的位置迭代器,第二是插入的狀態值;
multiset可以插入重復數據,insert插入數據返回值為插入數據的位置迭代器;,>

#include 
using namespace std;
#include 
#if 0
class Person
{
public:
	Person(string name, int age) :name(name), age(age) {

	}
	bool operator& p)
{
	for (set::iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout  t1;
	pair ::iterator, bool> ret=t1.insert(Person("小王", 18));
	if (ret.second)
	{
		cout  mt;
	auto point=mt.insert(Person("小王", 18));//返回當前位置迭代器iterator
	cout ::iterator ptr = mt.begin(); ptr != mt.end(); ptr++)
	{
		cout 
wKgaomSyZu-AaguDAATJkW6bC6Q402.png

7.pair對組使用

對組pair--成對出現的數據,通過隊組可以返回兩個數據
對組創建:
pair p(val,val2);--有參構造
pairp=make_pair(val,val2),type>,type>

#include 
using namespace std;
void test()
{
	pair p("小王", 18);
	cout p2 = make_pair("小李", 26);
	cout 
wKgaomSyZ2uAZJm9AANvHTUhop4769.png

8.set容器排序規則設置

set容器默認是升序排序,要實現降序排序則需要設置排序規則:提供一個仿函數。

#include 
using namespace std;
#include 
class mycompare
{
public:
	bool operator()(int v1,int v2)const //仿函數,即重載()運算符
	{
		return v1 > v2;
	}
};
void test()
{
	sett1;
	t1.insert(20);
	t1.insert(10);
	t1.insert(40);
	t1.insert(30);
	t1.insert(5);
	cout ::iterator ptr = t1.begin();ptr != t1.end(); ptr++)
	{
		cout t2;
	t2.insert(20);
	t2.insert(10);
	t2.insert(40);
	t2.insert(30);
	cout ::iterator ptr = t2.begin(); ptr != t2.end(); ptr++)
	{
		cout 
wKgZomSyaAqAI02oAANBHHL0m84982.png

9.set容器自定義數據排序示例

對自定義數據類型進行數據排序。

#include 
using namespace std;
#include 
class Person
{
	friend class mycompare;//定義為友元類
	friend ostream& operator p2.age;
	}
};
void PrintSet(sett)
{
	for (set::iterator ptr = t.begin(); ptr != t.end(); ptr++)
	{
		cout t1;
	t1.insert(Person("小王", 18));
	t1.insert(Person("小李", 18));
	t1.insert(Person("小李", 19));
	t1.insert(Person("小王", 18));
	PrintSet(t1);

}
int main()
{
	test();
	system("pause");
}
wKgaomSyaHaAUuRzAALtsANwS3c248.png



審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 字符串
    +關注

    關注

    1

    文章

    584

    瀏覽量

    20553
  • 函數
    +關注

    關注

    3

    文章

    4338

    瀏覽量

    62760
  • 容器
    +關注

    關注

    0

    文章

    496

    瀏覽量

    22078
  • C++
    C++
    +關注

    關注

    22

    文章

    2112

    瀏覽量

    73717
收藏 人收藏

    評論

    相關推薦

    c++vector容器

    1.vector容器介紹 ? ? ? 向量(Vector)是一個封裝了動態大小數組的順序容器(Sequence Container)。跟任意其它類型容器一樣,它能夠存放各種類型的對象。可以簡單的認為
    的頭像 發表于 07-13 19:36 ?1468次閱讀
    <b class='flag-5'>c++</b><b class='flag-5'>之</b>vector<b class='flag-5'>容器</b>

    c++list容器

    list是序列容器,允許在序列中的任何位置執行固定O(1)時間復雜度的插入和刪除操作,并在兩個方向進行迭代。list容器是一個雙向循環鏈表。
    的頭像 發表于 07-15 08:53 ?1443次閱讀
    <b class='flag-5'>c++</b><b class='flag-5'>之</b>list<b class='flag-5'>容器</b>

    C++STL算法(二)

    C++STL算法(二)
    的頭像 發表于 07-18 14:49 ?1072次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>STL算法(二)

    c++STL算法(三)

    c++STL算法(三)
    的頭像 發表于 07-18 15:00 ?1319次閱讀
    <b class='flag-5'>c++</b><b class='flag-5'>之</b>STL算法(三)

    C++文件操作

    C++文件操作
    的頭像 發表于 07-21 10:52 ?1123次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>文件操作

    C++力扣刷題記盛最多的水容器,讓我們從C++做題到放棄

    C++
    電路設計
    發布于 :2023年01月05日 15:49:23

    C++標準庫學習筆記重點

    查找一個帶某特定值的元素,其速度可能快過關聯式容器。 unordered set、unordered multiset、unordered map、unordered multimap31.
    發表于 10-23 20:28

    詳細剖析C++的的3種容器

    容器是隨著面向對象語言的誕生而提出的,容器類在面向對象語言中特別重要,甚至它被認為是早期面向對象語言的基礎。在現在幾乎所有的面向對象的語言中也都伴隨著一個容器集,在C++ 中,就是標準
    的頭像 發表于 01-09 12:57 ?4977次閱讀
    詳細剖析<b class='flag-5'>C++</b>的的3種<b class='flag-5'>容器</b>

    C++容器的使用代碼資料總結免費下載

    本文檔的主要內容詳細介紹的是C++容器的使用代碼資料總結免費下載。
    發表于 01-29 10:52 ?3次下載
    <b class='flag-5'>C++</b><b class='flag-5'>容器</b>的使用代碼資料總結免費下載

    C++設計新思維-泛型編程與設計應用

    C++設計新思維-泛型編程與設計應用
    發表于 11-16 15:59 ?3次下載

    什么是set

    set 容器,又稱集合容器,即該容器的底層是以紅黑樹變體實現的,是典型的關聯式容器。這意味著,set
    的頭像 發表于 02-27 15:42 ?1833次閱讀

    C++學習筆記c++的基本認識

    自這篇文章我們即將開始C++的奇幻之旅,其內容主要是讀C++ Primer的總結和筆記,有興趣可以找原版書看看,對于學習C++還是有很大幫助的。這篇文章將從一個經典的程序開始介紹C++
    的頭像 發表于 03-17 13:57 ?746次閱讀

    C++學習筆記順序容器

    C++中的順序容器是一種用于存儲和管理元素序列的數據結構。它們提供了一組有序的元素,并支持在序列的任意位置插入和刪除元素。C++標準庫中提供了多種順序容器,包括vector、deque
    的頭像 發表于 05-11 17:05 ?619次閱讀

    C++入門通用算法

    C++ 是一種強大的編程語言,它提供了許多通用算法,可以用于各種容器類型。這些算法是通過迭代器來操作容器中的元素,因此它們是通用的,可以用于不同類型的容器。在本篇博客中,我們將詳細介紹
    的頭像 發表于 05-17 09:40 ?685次閱讀

    C++之父新作帶你勾勒現代C++地圖

    為了幫助大家解決這些痛點問題,讓大家領略現代C++美,掌握其中的精髓,更好地使用C++C++之父Bjarne Stroustrup坐不住了,他親自操刀寫就了這本《
    的頭像 發表于 10-30 16:35 ?881次閱讀
    <b class='flag-5'>C++</b>之父新作帶你勾勒現代<b class='flag-5'>C++</b>地圖
    主站蜘蛛池模板: 国产在线伊人| 色-情-伦-理一区二区三区| 亚洲精品国产第一区第二区| 国产在线观看免费观看不卡| 亚洲免费无码av线观看| 久久性色AV亚洲电影无码| 99re5久久热在线| 帅哥男男GV在线1080P| 精品国产乱码久久久久久上海公司 | 日本高清在线一区二区三区| 疯狂小护士| 亚洲综合日韩在线2019| 暖暖 免费 高清 日本视频5| 国产精品玖玖玖影院| 在线视频网站www色| 青青热久久综合网伊人| 黄色三级视频在线| 超碰在线视频公开| 亚洲综合日韩中文字幕v在线| 欧美精品AV无码一区二区| 国产做国产爱免费视频| av网站视频在线观看| 亚洲第一色网| 日本国产成人精品无码区在线网站| 狠狠色狠色综合曰曰| 柏木舞子在线| 中文字幕视频在线观看| 忘忧草在线影院WWW日本动漫| 美国xaxwaswaskino| 国产人妻人伦精品无码.麻豆| av淘宝 在线观看| 野草观看免费高清视频| 日韩av国产av欧美天堂社区| 久久嫩草影院网站| 国产日韩精品SUV| 边摸边吃奶边做激情叫床视| 影音先锋av色咪影院| 无限好资源免费观看| 秋霞伦理电影在2017韩国在线伦| 久久精品视频在线看| 国产精品亚洲一区二区三区久久|