C++中不得不说的map容器

 更新时间:2022年02月10日 10:16:34   作者:独取一瓢C++  
大家好,本篇文章主要讲的是C++中不得不说的map容器,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

前言

为什么这两天在研究C++的容器呢,因为刷题的时候碰见了几个不擅长的题,得用STL中的几种容器才能解出来,所以也是动力满满呀,希望能尽快转过头去把那几个题给写出来,哈哈哈,当然,解题思路和过程后续我也会分享出来。话不多说,老规矩,

使用map容器要包含头文件#include<map>

1,map基本概念

简介:

  map中所有元素都是pair(成对出现的数)

  pair中第一个元素为key(键值),起到索引的作用,第二个元素为value(实值)

  所有的元素都会根据元素的键值自动排序

本质:

  map/multimap属于关联式容器,底层结构是用二叉树实现的

优点

  可以根据key值快速找到value值

map和multimap的区别:

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

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

2,map构造和赋值

功能描述: 

  对map容器进行构造和赋值操作

代码实现:

#include<iostream>
#include<map>
using namespace std;
void printMap(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;
}
void test01()
{
	//创建map容器 1,默认构造
	map<int, int>m;  //要写两个数据类型
	m.insert(pair<int, int>(1, 10));
	m.insert(pair<int, int>(3, 30));  //与插入的顺序无关
	m.insert(pair<int, int>(2, 20));  //容器会根据key值进行自动排序
	m.insert(pair<int, int>(4, 40));
	printMap(m);
 
	//2,拷贝构造
	map<int, int>m2(m);
	printMap(m2);
 
	//3,赋值
	map<int, int>m3;
	m3 = m2;  //等号方式赋值
	printMap(m3);
}
int main() {
	test01();
	return 0;
}

3,大小和交换

功能描述:

   统计map容器大小以及交换map容器

函数原型:

size(); //返回容器中元素的个数

empty(); //bool类型,判断容器是否为空

swap(st); //交换两个集合容器

4,插入和删除

功能描述:

  map容器进行插入和删除数据

代码实现:

#include<iostream>
#include<map>
using namespace std;
void test01()
{
	map<int, int>m;  
	//第一种插入
	m.insert(pair<int, int>(1, 10));
	
	//第二种插入
	m.insert(make_pair(2, 20)); //不用写模板参数
 
	//第三种插入
	m.insert(map<int, int>::value_type(3, 30));
 
	//第四种插入
	m[4] = 40;
 
	//第一种删除
	m.erase(m.begin()); //参数为迭代器
 
	//第二种删除
	m.erase(1); //按照key删除
 
	//第三种删除
	m.erase(m.begin(), m.end()); //区间删除
 
	//第四种删除
	m.clear(); //全部删除
}
int main() {
	test01();
	return 0;
}

5,查找和统计

功能描述:

  对map容器进行查找数据以及统计数据

函数原型:

  find(key);

/*查找key是否存在,若存在,返回该元素的迭代器;

若不存在,返回end()迭代器*/

  count(key);     // 统计key的元素个数

/*map不允许插入重复key值,count统计结果要么是0,要么是1

multimap的count统计结果可能大于1*/

6,排序

  map容器默认的排序方式是,按照key值进行从小到大的排序,但是我们可以利用仿函数实现从大到小排序,话不多说,直接上代码

#include<iostream>
#include<map>
using namespace std;
class MyCompare
{
public:
	bool operator()(int v1,int v2)const
	{
		return v1 > v2;  //降序
	}
};
void test01()
{
	map<int, int, MyCompare>m;  //加入仿函数
	m.insert(make_pair(1, 10)); 
	m.insert(make_pair(2, 20));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(4, 40));
	for (map<int, int,MyCompare>::iterator it = m.begin(); it != m.end(); it++) {//输出的时候别忘了加上
		cout << "key=" << it->first << " value=" << it-> second << endl;
	}
}
int main() {
	test01();
	return 0;
}

另外,对于自定义数据类型,map必须要指定排序规则。

总结

到此这篇关于C++中不得不说的map容器的文章就介绍到这了,更多相关C++ map容器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言fprintf()函数和fscanf()函数的具体使用

    C语言fprintf()函数和fscanf()函数的具体使用

    本文主要介绍了C语言fprintf()函数和fscanf()函数的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C语言入门学习之fgets()函数和fputs()函数

    C语言入门学习之fgets()函数和fputs()函数

    fgetc() 和 fputc() 函数每次只能读写一个字符,速度较慢,实际开发中往往是每次读写一个字符串或者一个数据块,这样能明显提高效率,这篇文章主要给大家介绍了关于C语言入门学习之fgets()函数和fputs()函数的相关资料,需要的朋友可以参考下
    2021-11-11
  • C语言实现扫雷小游戏(适合初学者)

    C语言实现扫雷小游戏(适合初学者)

    这篇文章主要为大家详细介绍了C语言实现扫雷小游戏,适合初学者练习,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • c++ 头文件<cwchar>中常见函数的实现代码

    c++ 头文件<cwchar>中常见函数的实现代码

    本文记录了c++ 头文件<cwchar>中常见函数的实现,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • c语言printf函数的使用详解

    c语言printf函数的使用详解

    本篇文章是对c语言中printf函数的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C程序和C++程序之间的互相调用图文教程

    C程序和C++程序之间的互相调用图文教程

    这篇文章主要给大家介绍了关于C程序和C++程序之间互相调用的相关资料,我们平常在刷题的时候,难免遇到实现多组输入这样的问题,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • C++实现职工管理系统

    C++实现职工管理系统

    这篇文章主要为大家详细介绍了C++实现职工管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • 详解C++中左值与右值的概念与应用

    详解C++中左值与右值的概念与应用

    左值(Lvalue)和右值(Rvalue)是C++和其他编程语言中用来区分表达式的概念。这篇文章主要为大家详细介绍了它们的概念与应用,需要的可以参考一下
    2023-03-03
  • C语言顺序表的基本操作(初始化,插入,删除,查询,扩容,打印,清空等)

    C语言顺序表的基本操作(初始化,插入,删除,查询,扩容,打印,清空等)

    这篇文章主要介绍了C语言顺序表的基本操作(初始化,插入,删除,查询,扩容,打印,清空等),具有很好的参考价值,希望对大家有所帮助。
    2023-02-02
  • C语言分治法实现归并排序

    C语言分治法实现归并排序

    这篇文章主要为大家详细介绍了C语言实现归并排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08

最新评论