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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++之map/mutimap容器

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

1.map/multimap容器簡介

map/multimap容器,也是一個關(guān)聯(lián)式容器,底層通過二叉樹實(shí)現(xiàn)。

map/multimap容器中保存的是對組(pair)數(shù)據(jù)。對組(pair)的第一個元素鍵值key,起到索引作用,第二個元素value為實(shí)值;

map容器第一個鍵值不能重復(fù),出現(xiàn)重復(fù)則會自動忽略該數(shù)據(jù),multimap則不受此限制;

map/multimap插入數(shù)據(jù)時(shí)會根據(jù)鍵值key進(jìn)行排序;

2.map/multimap容器構(gòu)造函數(shù)與賦值

  • map/multimap構(gòu)造函數(shù):
    map p;無參構(gòu)造
    map(begin,end);//區(qū)間賦值
    map(const map &p);//拷貝構(gòu)造,type>
  • map/multimap賦值:
    重載"=": map &operator=();
  • map/multimap插入數(shù)據(jù):
    inset()

使用示例:

#include 
#include 
using namespace std;

#if 0
void Printmap(map& p)
{
	for (map::iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout first p1;
	p1.insert(pair(1, "小王"));
	p1.insert(pair(3,"小李"));
	p1.insert(pair(2, "小劉"));
	p1.insert(pair(8, "小紅"));
	p1.insert(pair(5, "小王"));
	p1.insert(pair(5, "小李"));
	cout p2(p1.begin(), p1.end());
	cout p3(p1);
	cout & p)
{
	for (multimap::iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout first mp;
	mp.insert(pair(1, "小王"));
	mp.insert(pair(3, "小李"));
	mp.insert(pair(2, "小劉"));
	mp.insert(pair(8, "小紅"));
	mp.insert(pair(5, "小王"));
	mp.insert(pair(5, "小李"));
	Printmultimap(mp);

}
int main()
{
	cout 
wKgaomSyxwuAUHLYAAaklS7sSbs364.png

3.map/multimap獲取容器元素個數(shù)和互換數(shù)據(jù)

map/multimap獲取容器元素個數(shù)和互換數(shù)據(jù):

size(); --獲取元素個數(shù)

empty(); --判斷容器是否為空

swap(); --互換數(shù)據(jù)

使用示例:

#include 
#include 
using namespace std;
void PrintMap(map& p)
{
	for (map::iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout first second p1;
	p1.insert(pair(1, "小王"));
	p1.insert(pair(3, "小李"));
	p1.insert(pair(2, "小劉"));
	p1.insert(pair(8, "小紅"));
	p1.insert(pair(5, "小王"));
	p1.insert(pair(5, "小李"));
	if (p1.empty())
	{
		cout p2;
	p2.insert(pair(10, "AA"));
	p2.insert(pair(13, "BB"));
	p2.insert(pair(12, "CC"));
	cout 
wKgZomSyx4eAcY2aAAa9agO3T-Y657.png

4.map/multimap插入元素和刪除元素

map/multimap插入元素
	insert(elem)  --插入單個元素
	insert(begin,end);//插入一個區(qū)間
map/multimap刪除元素:
	erase(pos); --刪除指定位置的數(shù)據(jù),返回下一個成員的迭代器
	erase(begin,end);--刪除一個區(qū)間
	erase(key); --指定keyc刪除
	erase(elem);//刪除指定元素
	clear() --清空容器

使用示例:

#include 
#include 
using namespace std;
class Person
{
public:
	Person() {

	}
	Person(int age, string name) :age(age), name(name) {
	}

	int age;
	string name;
};
ostream& operator& p)
{
	for (map::const_iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout first second).name second).age  p;
	//第一種方式:
	p.insert(pair(1, Person(18, "小王")));
	//第二種方式:
	p.insert(make_pair(5, Person(19, "小林")));
	//第三種
	p.insert(map::value_type(2, Person(20, "小崔")));
	//第四種
	p[3] = Person(20,"小劉");//一般不推薦這種方式

	cout p2;
	p2.insert(p.begin(), p.end());//區(qū)間插入
	cout ::iterator pos = p2.begin();
	for (int i = 0; i < 2; i++)pos++;
	p2.erase(pos);
	PrintMap(p2);
	cout 
wKgZomSyyGKARENcAAZAgwEgqYk966.png

5.map/multimap查找與統(tǒng)計(jì)

map/multimap查找:
	find(key);//按key值查找
	lower_bound(key);//找到第一個大于等于key值,返回該位置的迭代器
	upper_bound(key);//返回第一個大于key的值的迭代器
	equal_range(key);//返回一個迭代器隊(duì)組,第一個值等價(jià)于lower_bound(key)迭代器
											第二個值等價(jià)于upper_bound(key)迭代器
map/multimap統(tǒng)計(jì):
	count(key);//按key值統(tǒng)計(jì)

使用示例:

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

	}
	string name;
	int age;
};
ostream& operator& p)
{
	for (map::iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout first second p;
	p.insert(pair(1, Person(18, "小王")));
	p.insert(make_pair(3, Person(25, "小劉")));
	p.insert(map::value_type(2, Person(18, "小林")));
	p.insert(make_pair(4, Person(20, "阿水")));
	p.insert(make_pair(2, Person(20, "阿水")));
	PrintMap(p);
	map::iterator ret=p.find(2);
	if (ret != p.end())
	{
		cout first second & p)
{
	for (multimap::iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout first second mp;
	mp.insert(pair(1, Person(18, "小王")));
	mp.insert(make_pair(2, Person(25, "小劉")));
	mp.insert(multimap::value_type(2, Person(18, "小林")));
	mp.insert(make_pair(4, Person(20, "阿水")));
	mp.insert(make_pair(2, Person(20, "阿水")));
	cout ::iterator temp = mp.find(2);
	cout :" first second :" ::iterator temp2 = mp.upper_bound(2);
	for (; temp != temp2; temp++)
	{
		cout first second :" ::iterator, multimap::iterator> ret2 = mp.equal_range(2);
	while (ret2.first != ret2.second)
	{
		cout first second 
wKgZomSyyRmATVPWAAn-HhQ_Rco470.png

6.map/multimap指定排序

map/multimap插入數(shù)據(jù)時(shí)默認(rèn)以key值排序,按照升序排序,若要改為降序排序,則需要提供一個仿函數(shù)。

#include 
using namespace std;
#include 
class Person
{
public:
	Person() {

	}
	Person(int age, string name) :age(age), name(name) {
	}

	int age;
	string name;
};
ostream& operator val2;
	}
};
void PrintMap(const map& p)
{
	for (map::const_iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout first second p;
	p.insert(make_pair(1, Person(18, "小王")));
	p.insert(make_pair(6, Person(25, "小劉")));
	p.insert(make_pair(2, Person(18, "小林")));
	p.insert(make_pair(4, Person(20, "阿水")));
	p.insert(make_pair(3, Person(20, "阿水")));
	PrintMap(p);
}

int main()
{
	test01();
	system("pause");
}
wKgaomSyyZKAIqAiAAPtltIpjZ8218.png

7.職工分組管理案例

公司有10個員工(ABCDEFGHIJ),現(xiàn)在用重新對員工進(jìn)行部門調(diào)整;員工信息組成:姓名、工資,所屬部門(策劃、美工、研發(fā));

1.隨機(jī)給10個員工分配部門和工資;
2.通過multimap隨機(jī)插入,key代表部門,value代表員工;
3.分部門顯示員工信息(職工信息以工資從高到底進(jìn)行排序);

  • 功能實(shí)現(xiàn):

(1)創(chuàng)建職工類,該類包含的成員有職工姓名、工資;

(2)創(chuàng)建一個vector容器,保存10個職工信息。姓名和工資均通過隨機(jī)數(shù)生成;

(3)對vector容器進(jìn)行排序,按工資進(jìn)行降序排序;

(4)創(chuàng)建一個multimap容器,所屬部門作為key,進(jìn)行職工信息插入;

(5)進(jìn)行分部門輸出職工信息。通過lower_bound()和upper_bound()函數(shù)進(jìn)行查找處理。

實(shí)現(xiàn)示例:

#include 
#include 
#include 
#include 
using namespace std;
class Worker
{
public:
	Worker(string name, int money) :name(name), money(money) {

	}
	bool operatormoney == p.money)
		{
			return this->name < p.name;
		}
		return this-?>money>p.money;

	}
	string name;//姓名
	int money;//工資
};
ostream& operator &p)
{
	char data;
	int money;
	for (int i = 0; i < 10; i++)
	{
		data = 'A' + rand() % 11;
		string name;
		name = data;
		money = 6000 + rand() % 10000;
		p.push_back(Worker(name, money));
	}
	//對員工按工資排序
	sort(p.begin(),p.end());
}
//分配部門信息
void SetWorkerPosition(multimap& p,vector&vtr)
{
	int flag = 0;
	for (int i = 0; i < 10; i++)
	{
		flag = rand() % 3;
		switch (flag)
		{
			case 0://策劃
				p.insert(make_pair("策劃", vtr[i]));
				break;
			case 1://美工
				p.insert(make_pair("美工", vtr[i]));
				break;
			case 2://研發(fā)
				p.insert(make_pair("研發(fā)", vtr[i]));
				break;

		}
	}
}
//分部門顯示信息
void DisplayWorkerInfo(multimap&p, string position)
{
	multimap::iterator begin = p.lower_bound(position);//找到第一個>=position內(nèi)容
	multimap::iterator end = p.upper_bound(position);//找找到第一個>positionn內(nèi)容
	cout second  vtr;//創(chuàng)建一個vec容器
	//保存員工信息
	SetWorkerInfo(vtr);
	/*for (vector::iterator ptr = vtr.begin(); ptr != vtr.end(); ptr++)
	{
		cout p;
	SetWorkerPosition(p, vtr);
	/*for (multimap::iterator ptr = p.begin(); ptr != p.end(); ptr++)
	{
		cout first second 
wKgaomSyyzWAe0LsAAT_SPvB1cg117.png





審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4345

    瀏覽量

    62884
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    499

    瀏覽量

    22094
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2114

    瀏覽量

    73795
  • MAP
    MAP
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    15164
收藏 人收藏

    評論

    相關(guān)推薦

    c++vector容器

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

    c++list容器

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

    C++STL算法(二)

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

    c++STL算法(三)

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

    C++文件操作

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

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

    C++
    電路設(shè)計(jì)
    發(fā)布于 :2023年01月05日 15:49:23

    詳細(xì)剖析C++的的3種容器

    容器是隨著面向?qū)ο笳Z言的誕生而提出的,容器類在面向?qū)ο笳Z言中特別重要,甚至它被認(rèn)為是早期面向?qū)ο笳Z言的基礎(chǔ)。在現(xiàn)在幾乎所有的面向?qū)ο蟮恼Z言中也都伴隨著一個容器集,在C++ 中,就是標(biāo)準(zhǔn)
    的頭像 發(fā)表于 01-09 12:57 ?5000次閱讀
    詳細(xì)剖析<b class='flag-5'>C++</b>的的3種<b class='flag-5'>容器</b>

    C++容器的使用代碼資料總結(jié)免費(fèi)下載

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

    C++設(shè)計(jì)新思維-泛型編程與設(shè)計(jì)應(yīng)用

    C++設(shè)計(jì)新思維-泛型編程與設(shè)計(jì)應(yīng)用
    發(fā)表于 11-16 15:59 ?3次下載

    什么是 map

    map 容器,又稱鍵值對容器,即該容器的底層是以紅黑樹變體實(shí)現(xiàn)的,是典型的關(guān)聯(lián)式容器。這意味著,map
    的頭像 發(fā)表于 02-27 15:41 ?3077次閱讀

    C++學(xué)習(xí)筆記c++的基本認(rèn)識

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

    C++學(xué)習(xí)筆記順序容器

    C++中的順序容器是一種用于存儲和管理元素序列的數(shù)據(jù)結(jié)構(gòu)。它們提供了一組有序的元素,并支持在序列的任意位置插入和刪除元素。C++標(biāo)準(zhǔn)庫中提供了多種順序容器,包括vector、deque
    的頭像 發(fā)表于 05-11 17:05 ?640次閱讀

    C++入門通用算法

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

    C++之父新作帶你勾勒現(xiàn)代C++地圖

    為了幫助大家解決這些痛點(diǎn)問題,讓大家領(lǐng)略現(xiàn)代C++美,掌握其中的精髓,更好地使用C++C++之父Bjarne Stroustrup坐不住了,他親自操刀寫就了這本《
    的頭像 發(fā)表于 10-30 16:35 ?934次閱讀
    <b class='flag-5'>C++</b>之父新作帶你勾勒現(xiàn)代<b class='flag-5'>C++</b>地圖

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeMap

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎(chǔ)類庫的安全關(guān)聯(lián)容器:SafeMap。OpenHarmony提供了一個線程安全的map實(shí)現(xiàn)。SafeMap在STLmap基礎(chǔ)上封裝互斥鎖
    的頭像 發(fā)表于 08-30 12:42 ?429次閱讀
    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的<b class='flag-5'>C++</b>公共基礎(chǔ)類庫案例:SafeMap
    主站蜘蛛池模板: 国产曰韩无码亚洲视频 | 精品手机在线1卡二卡3卡四卡 | 小妇人电影免费完整观看2021 | 亚洲 欧美 日韩 卡通 另类 | 飘雪在线观看免费完整版 | 用震蛋调教女性下面视频 | 99re久久热最新地址一 | 午夜A级理论片左线播放 | 中文字幕午夜乱理片 | 在线国产a不卡 | 亚洲风情无码免费视频 | 婚后被调教当众高潮H喷水 回复术士勇者免费观看全集 | 高h原耽肉汁动漫视频 | 伊人色啪啪天天综合婷婷 | 在线综合 亚洲 欧美 | 伦理片在线线249 | 碰超成人在线公开免费视频 | 精品国产自在现线拍国语 | 超碰公开在线caopon | 最近中文字幕2019国语4 | 亚洲欧美一区二区三区四区 | 欧美性猛交xxxxxxxx软件 | 免费国产成人手机在线观看 | 国产一区二区精品视频 | 亚洲福利天堂网福利在线观看 | 国偷自产AV一区二区三区健身房 | 日本片bbbxxx | 久久三级视频 | 男女牲交全过程免费播放 | 国产又黄又粗又爽又色的视频软件 | 香蕉久久av一区二区三区 | 四房色播手机版 | 国产一区内射最近更新 | 男人一进一出桶女人视频 | 久久re这里视频精品15 | 视频一区亚洲视频无码 | 日本中文字幕伊人成中文字幕 | 在线播放免费人成视频 | 91亚洲精品 | 亚洲天堂一区二区三区 | 久久精品视频15人人爱在线直播 |