STL--map容器

目录

一、pair(对组)

 二、map基本概念

三、map构造和赋值

1.构造:

2.赋值:

 四、map大小和交换

 五、map 插入和删除

 六、map 查找和统计

 七、map 排序

 八、写在最后


类似于Python中的字典

一、pair(对组)

  • pair<type,  type>  p  (value1,  value2);
  • pair<type,  type>  p = make_pair(value1,  value2);
#include<iostream>
using namespace std;
#include<set>

// pair 队组的创建
int main()
{
	// 成对出现的数据
	pair<string,int> p("TOM",20);
	cout<<"姓名:"<<p.first<<"\t年龄:"<<p.second<<endl;

	// 第二种创建方式
	pair<string,int> p2 = make_pair("Jerry",23);
	cout<<"姓名:"<<p2.first<<"\t年龄:"<<p2.second<<endl;
	return 0;
}

 二、map基本概念

1. 功能

  • map 中所有元素都是pair
  • pair 中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
  • 所有元素都会根据元素的键值自动排序

2. 本质:map/multimap 属于关联式容器,底层是用二叉树实现的

3. 优点:可以根据key值快速找到value值

4. map和multimap的区别:

        map 不允许容器中有重复的key值元素

        multimap 允许容器中有重复的key值元素

三、map构造和赋值

map容器中所有的元素都是成对出现,插入数据的时候要用对组

1.构造:

  • map <T1,  T2>  mp;                     // map默认构造函数
  • map(const  map  &  mp);                 // 拷贝构造函数

2.赋值:

  • map  &  opertor=(const  map  &  mp);        // 重载等号操作符
	#include<iostream>
	using namespace std;
	#include<map>
	
	// 输出
	void print_map(map<int,int> &m)
	{
		for(map<int,int>::iterator it=m.begin();it!=m.end();it++)
		{
			cout<<"key = "<<it->first<<" value = "<<it->second<<endl;
		}
		cout<<endl;
	}
	int main()
	{
		// 创建map容器
		map<int,int> m;// 无论插入的顺序是什么,输出都会是升序按照key的大小
		m.insert(pair<int,int>(1,10));
		m.insert(pair<int,int>(3,20));
		m.insert(pair<int,int>(2,30));
		m.insert(pair<int,int>(4,40));
	
		print_map(m);
	
		// 拷贝构造
		map<int,int> m2(m);
		print_map(m2);
	
		// 赋值
		map<int,int>m3;
		m3=m2;
		print_map(m3);
		return 0;
	}

 四、map大小和交换

  • size();                      // 返回容器中元素个数
  • empty();                  // 判断容器是否为空
  • swap();                   // 交换两个集合容器
	#include<iostream>
	using namespace std;
	#include<map>
	
	// 输出
	void print_map(map<int,int> &m)
	{
		for(map<int,int>::iterator it=m.begin();it!=m.end();it++)
		{
			cout<<"key = "<<it->first<<" value = "<<it->second<<endl;
		}
		cout<<endl;
	}
	// map 容器的大小和交换
	int main()
	{
		// 创建map容器
		map<int,int> m;// 无论插入的顺序是什么,输出都会是升序按照key的大小
		m.insert(pair<int,int>(1,10));
		m.insert(pair<int,int>(2,20));
		m.insert(pair<int,int>(3,30));
		m.insert(pair<int,int>(4,40));
	
		print_map(m);
	
		// 判空
		if(m.empty())
		cout<<"m 为空"<<endl;
		else
		cout<<"m 不为空"<<endl;
	
		// 大小
		cout<<"m 的大小:"<<m.size()<<endl;
	
		// 交换
		map<int,int> m1;
		m1.insert(pair<int,int>(5,100));
		m1.insert(pair<int,int>(6,200));
		m1.insert(pair<int,int>(7,300));
		m1.insert(pair<int,int>(8,400));
		cout<<"交换前:"<<endl;
		cout<<"m"<<endl;
		print_map(m);
		cout<<"m1"<<endl;
		print_map(m1);
		cout<<"交换后:"<<endl;
		m.swap(m1);
		cout<<"m"<<endl;
		print_map(m);
		cout<<"m1"<<endl;
		print_map(m1);
		return 0;
	}

 五、map 插入和删除

  • insert(elem);                            // 在容器中插入元素

  • erase(pos);                           // 删除pos迭代器所指的元素,并返回下一个元素的迭代器
  • erase(beg,  end);     // 删除(beg,end)区间内的所有元素,返回下一个元素的迭代器
  • erase(key);                              // 删除容器给i中值为key的元素
  • clear();                                    // 删除容器中所有元素
	#include<iostream>
	using namespace std;
	#include<map>
	
	// 输出
	void print_map(map<int,int> &m)
	{
		for(map<int,int>::iterator it=m.begin();it!=m.end();it++)
		{
			cout<<"key = "<<it->first<<" value = "<<it->second<<endl;
		}
		cout<<endl;
	}
	// map 容器的插入和删除
	int main()
	{
		// 创建map容器
		map<int,int> m;// 无论插入的顺序是什么,输出都会是升序按照key的大小
		// 插入 insert
		m.insert(pair<int,int>(1,10));
		m.insert(pair<int,int>(2,20));
		m.insert(pair<int,int>(3,30));
		m.insert(pair<int,int>(4,40));
		print_map(m);
	
		// make_pair
		m.insert(make_pair(5,50));
	
		// 第三种
		m.insert(map<int,int>::value_type(6,60));
	
		// 第四种
		m[7] = 70;  
		cout<<m[4]<<endl;  // [] 用于锁定value的位置
		print_map(m);
		cout<<"key不存在默认补充零 "<<m[8]<<endl; // 如果map中没有给键添加数据,那么会自动补零
	
		// 删除
		cout<<"删除第一个元素"<<endl;
		m.erase(m.begin());  // 传入的参数是迭代器
		print_map(m);
	
		// 可以直接传入 key 值进行删除
		cout<<"按照key值删除某一个元素"<<endl;
		m.erase(3);
		print_map(m);
	
		// 区间删除
		cout<<"区间删除"<<endl;
		m.erase(m.begin(),m.end()); // 全部删除
		print_map(m);
	
		//删除函数
		m.clear();
		cout<<"清空"<<endl;
		print_map(m);
		return 0;
	}

 六、map 查找和统计

  • find(key);                      // 查找key是否存在,返回该键的元素迭代器,若不存在,返回map.end();
  • count(key);                  // 统计key的元素个数
	#include<iostream>
	using namespace std;
	#include<map>
	
	// 输出
	void print_map(map<int,int> &m)
	{
		for(map<int,int>::iterator it=m.begin();it!=m.end();it++)
		{
			cout<<"key = "<<it->first<<" value = "<<it->second<<endl;
		}
		cout<<endl;
	}
	// map 容器的查找和统计
	int main()
	{
		// 创建map容器
		map<int,int> m;// 无论插入的顺序是什么,输出都会是升序按照key的大小
		// 插入 insert
		m.insert(pair<int,int>(1,10));
		m.insert(pair<int,int>(2,20));
		m.insert(pair<int,int>(3,30));
		m.insert(pair<int,int>(4,40));
		print_map(m);
	
		// 查找
		map<int,int>::iterator pos = m.find(1);    // 返回的是迭代器
		if(pos!=m.end())
		cout<<"找到了位于 "<<pos->first<<" 值为 "<<pos->second<<" 的元素"<<endl;
		else
		cout<<"该元素不存在"<<endl;
	
		// 统计
		int num =0;
		num = m.count(8); // map 容器中一个 key 只存在一个,不能重复添加一个 key值对应多个value值
		cout<<"num = "<<num<<endl;
		return 0;
	}

 七、map 排序

  • map容器按照key值进行排序,从小到大
  • 利用仿函数,可以改变排序规则
	#include<iostream>
	using namespace std;
	#include<map>
	
	class my_compare
	{
	public:
		bool operator()(int v1,int v2)       // 重载()
		{
			// 仿函数
			// 指定排序方式为降序
			return v1> v2;
		}
	};
	
	// 输出
	void print_map(map<int,int,my_compare> &m)
	{
		for(map<int,int,my_compare>::iterator it=m.begin();it!=m.end();it++)
		{
			cout<<"key = "<<it->first<<" value = "<<it->second<<endl;
		}
		cout<<endl;
	}
	// map 容器的排序
	
	int main()
	{
		// 创建map容器
		map<int,int,my_compare> m;// 无论插入的顺序是什么,输出都会是升序按照key的大小
		// 插入 insert
		m.insert(pair<int,int>(1,10));
		m.insert(pair<int,int>(2,20));
		m.insert(pair<int,int>(3,30));
		m.insert(pair<int,int>(4,40));
		m.insert(pair<int,int>(5,50));
		print_map(m);
		return 0;
	}

 八、写在最后

        关于C++中STL的容器的介绍大致就是这样几个容器,没有官方的解释文章和代码,都是一些用法,配上了代码来解释,小编的本意是用来作为笔记本,记录方便,不易丢失。如果能帮到各位在学习C++的同学和朋友们,小编也是非常开心的,最后,还会加入一些关于算法类的介绍,希望大家觉得不错点个赞。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STL(Standard Template Library)提供了一个名为`std::map`的关联容器,它基于红黑树实现,用于存储键值对,并按照键的顺序进行排序。下面是`std::map`容器的一些常用方法: 1. 插入元素: ```cpp std::map<Key, Value> myMap; myMap.insert(std::make_pair(key, value)); // 使用insert方法插入键值对 myMap[key] = value; // 使用下标操作符[]插入键值对,如果键已存在,则会更新值 ``` 2. 删除元素: ```cpp myMap.erase(key); // 根据键删除元素 myMap.clear(); // 清空所有元素 ``` 3. 访问元素: ```cpp Value value = myMap[key]; // 使用下标操作符[]访问指定键对应的值 auto it = myMap.find(key); // 使用find方法查找指定键的迭代器 if (it != myMap.end()) { Value value = it->second; // 通过迭代器访问指定键对应的值 } ``` 4. 遍历容器: ```cpp for (const auto& pair : myMap) { Key key = pair.first; // 键 Value value = pair.second; // 值 // 其他操作 } ``` 5. 判断元素是否存在: ```cpp if (myMap.count(key) > 0) { // 键存在 } ``` 6. 获取容器大小和判断容器是否为空: ```cpp size_t size = myMap.size(); // 获取容器中键值对的个数 bool isEmpty = myMap.empty(); // 判断容器是否为空 ``` 这些是`std::map`容器的一些常用方法,还有其他一些方法和成员函数可以进一步扩展其功能。你可以参考C++标准库的文档以获取更详细的信息。 希望对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值