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

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

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

3天內不再提示

C++之map/mutimap容器

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

1.map/multimap容器簡介

map/multimap容器,也是一個關聯式容器,底層通過二叉樹實現。

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

map容器第一個鍵值不能重復,出現重復則會自動忽略該數據,multimap則不受此限制;

map/multimap插入數據時會根據鍵值key進行排序;

2.map/multimap容器構造函數與賦值

  • map/multimap構造函數:
    map p;無參構造
    map(begin,end);//區間賦值
    map(const map &p);//拷貝構造,type>
  • map/multimap賦值:
    重載"=": map &operator=();
  • map/multimap插入數據:
    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獲取容器元素個數和互換數據

map/multimap獲取容器元素個數和互換數據:

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

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

swap(); --互換數據

使用示例:

#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);//插入一個區間
map/multimap刪除元素:
	erase(pos); --刪除指定位置的數據,返回下一個成員的迭代器
	erase(begin,end);--刪除一個區間
	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());//區間插入
	cout ::iterator pos = p2.begin();
	for (int i = 0; i < 2; i++)pos++;
	p2.erase(pos);
	PrintMap(p2);
	cout 
wKgZomSyyGKARENcAAZAgwEgqYk966.png

5.map/multimap查找與統計

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

使用示例:

#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插入數據時默認以key值排序,按照升序排序,若要改為降序排序,則需要提供一個仿函數。

#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),現在用重新對員工進行部門調整;員工信息組成:姓名、工資,所屬部門(策劃、美工、研發);

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

  • 功能實現:

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

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

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

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

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

實現示例:

#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://研發
				p.insert(make_pair("研發", vtr[i]));
				break;

		}
	}
}
//分部門顯示信息
void DisplayWorkerInfo(multimap&p, string position)
{
	multimap::iterator begin = p.lower_bound(position);//找到第一個>=position內容
	multimap::iterator end = p.upper_bound(position);//找找到第一個>positionn內容
	cout second  vtr;//創建一個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





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

    關注

    3

    文章

    4329

    瀏覽量

    62576
  • 容器
    +關注

    關注

    0

    文章

    495

    瀏覽量

    22060
  • C++
    C++
    +關注

    關注

    22

    文章

    2108

    瀏覽量

    73627
  • MAP
    MAP
    +關注

    關注

    0

    文章

    49

    瀏覽量

    15137
收藏 人收藏

    評論

    相關推薦

    c++vector容器

    1.vector容器介紹 ? ? ? 向量(Vector)是一個封裝了動態大小數組的順序容器(Sequence Container)。跟任意其它類型容器一樣,它能夠存放各種類型的對象??梢院唵蔚恼J為
    的頭像 發表于 07-13 19:36 ?1421次閱讀
    <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 ?1403次閱讀
    <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 ?1036次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>STL算法(二)

    c++STL算法(三)

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

    C++文件操作

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

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

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

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

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

    什么是 map

    map 容器,又稱鍵值對容器,即該容器的底層是以紅黑樹變體實現的,是典型的關聯式容器。這意味著,map
    的頭像 發表于 02-27 15:41 ?2933次閱讀

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

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

    C++學習筆記順序容器

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

    C++入門通用算法

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

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

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

    基于OpenHarmony標準系統的C++公共基礎類庫案例:SafeMap

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎類庫的安全關聯容器:SafeMap。OpenHarmony提供了一個線程安全的map實現。SafeMap在STLmap基礎上封裝互斥鎖
    的頭像 發表于 08-30 12:42 ?344次閱讀
    基于OpenHarmony標準系統的<b class='flag-5'>C++</b>公共基礎類庫案例:SafeMap
    主站蜘蛛池模板: 人妻夜夜爽99麻豆AV| 亚洲国产中文字幕在线视频| 秋霞伦理手机在线看片| 日本精品在线观看视频| 色WWW永久免费视频首页| 亚洲 自拍 欧洲 视频二区| 伊人久久中文字幕久久cm | 男女免费观看在线爽爽爽视频| 尿了么app| 色欲AV亚洲午夜精品无码| 亚洲国产在线视频中文字| 中文天堂www资源| 扒开美女下面粉嫩粉嫩冒白浆| 国产跪地吃黄金喝圣水合集| 娇妻归来在线观看免费完整版电影 | 欧美整片华人play| 四虎国产精品永久免费入口| 亚洲午夜精品aaa级久久久久| 91区国产福利在线观看午夜| 成年免费大片黄在线观看岛国| 国产人妖一区二区| 久久丫线这里只精品| 全免费午夜一级毛片| 亚洲国产欧美在线看片| 99re这里只有精品视频| 国产精品99久久免费黑人人妻 | 狠狠躁天天躁小说| 欧美成人momandson| 亚洲成人mv| 99综合之综合久久伊人| 国产亚洲AV精品无码麻豆| 美女张开大腿| 性奴公司 警花| adc影院在线| 红色机尾快播| 人人看人人看| 云南14学生真实初次破初视频| 第四色男人天堂| 久久永久影院免费| 天天操人人射| 99RE6这里只有精品国产AV|