<C++>map 容器快速上手|自定义数据类型排序的避坑理解(上)

简介: <C++>map 容器快速上手|自定义数据类型排序的避坑理解

🔥前言


继 set 容器后,今天总结一下 map 容器的功能,从零到一快速掌握基本使用与常用接口。map 在STL 编程中与 vector、list、set 具有同等重要的地位,键值对的方式存储元素在查找时很是高效,那么下面正式开始 map 容器的学习之旅。


1、map 容器基本操作,从构造到查找统计

1.1、map/ multimap 基本概念

特点:


map中所有元素都是二元组pair

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

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

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

本质:


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

二者区别:


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

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

1.2、map 赋值和构造

功能:


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

函数原型:


map<T1, T2> mp; 默认构造函数:

map(const map &mp); 拷贝构造函数

map& operator=(const map &mp); 重载等号操作符

代码示例:

// 遍历容器
void printInfo(map<int,int>& mp)
{
  for (map<int, int>::iterator it = mp.begin(); it != mp.end(); it++) {
    cout << "key = " << it->first << " value = " << it->second << endl;
  }
  cout << endl;
}
// 构造和赋值
void test01()
{
  // 默认构造
  map<int, int> mp1;
  // 利用二元组显示创建
  mp1.insert(make_pair(1,1));
  mp1.insert(make_pair(5,2));
  mp1.insert(make_pair(4,5));
  printInfo(mp1);
  // 拷贝构造
  map<int, int> mp2(mp1);
  printInfo(mp2);
  // 赋值
  map<int, int> mp3;
  mp3 = mp2;
  printInfo(mp3);
}

1.3、map 大小和交换

功能:


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

函数原型:


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

empty(); 判断容器是否为空

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

代码示例:

// 大小和交换
void test02()
{
  // 大小
  map<int, int>mp;
  mp.insert(pair<int, int>(1, 10));
  mp.insert(pair<int, int>(3, 30));
  mp.insert(pair<int, int>(2, 20));
  if (mp.empty())
  {
    cout << "m为空" << endl;
  }
  else
  {
    cout << "m的大小为: " << mp.size() << endl;
  }
  // 交换
  map<int, int>m2;
  m2.insert(pair<int, int>(4, 100));
  m2.insert(pair<int, int>(5, 200));
  m2.insert(pair<int, int>(6, 300));
  cout << "交换前" << endl;
  printInfo(mp);
  printInfo(m2);
  cout << "交换后" << endl;
  mp.swap(m2);
  printInfo(mp);
  printInfo(m2);
}
目录
相关文章
|
23天前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
31 0
|
2月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
56 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
2月前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
60 5
|
2月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
62 2
|
8天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
131 77
|
16天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
1天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
10 2
实战~如何组织一个多容器项目docker-compose
|
10天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
44 3
|
17天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
50 7
|
17天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
27 5