map容器及multimap容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: map容器及multimap容器

导航


1.map基本认识,构造和赋值

2.map容器的大小与交换

3.map容器的插入与删除

4.map的查找与统计

5.map的排序

———————————————————————————————————


1.map基本认识,构造和赋值


1.map中所有元素时pair,是成对出现的

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

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


本质:都是关联式,底层结构用的是二叉树


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


区别:


1.map中不允许有重复的key值元素,value值可以有重复

2.multimap允许有重复key值元素,value值可以有重复


构造函数:


map< T1,T2> mp; //注意有两个参数

map(const map& mp); //拷贝构造


赋值:


operator= 重载


例子:


#include <iostream>
using namespace std;
#include <map>
void PrintMap(map<int,int>&m)
{
  for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
  {
  cout<<(*it).first<<"  "<<(*it).second<<endl;  //输入成组数据时用first和second
  }
  cout<<endl;
}
void test()
{
  map<int,int> mp;
  mp.insert(pair<int,int>(1,10));  //插入时要插入成对数用pair
  mp.insert(pair<int,int>(2,20));
  mp.insert(pair<int,int>(4,40));
  mp.insert(pair<int,int>(3,30)); //查完之后会根据key值进行自动排序
  PrintMap(mp);
  map<int,int> mp1;
  mp1 = mp; //operator= 赋值
  PrintMap(mp1);
  map<int,int> mp2(mp1); //拷贝构造
  PrintMap(mp2);
}
int main()
{
  test();
  system("pause");
  return 0;
}


运行结果:



注意点:


1.map容器插入要用pair类型

2.插入的会根据key自动排序

3.输出其中数时,first代表key,second代表value


———————————————————————————————————


2.map容器的大小与交换


size(); //map容器里的大小

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

swap(st); //进行交换容器


———————————————————————————————————


3.map容器的插入与删除


insert()

clear()

erase(pos) //删除对应元素的迭代器指向的元素

erase(beg,end) //删除指向区间元素的迭代器

erase(key) //根据key值来删除value值

可以用[key] 来访问value值


例子:


#include <iostream>
using namespace std;
#include <map>
void PrintMap(map<int,int>&m)
{
  for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
  {
  cout<<(*it).first<<"  "<<(*it).second<<endl;  //输入成组数据时用first和second
  }
  cout<<endl;
}
void test()
{
  map<int,int> mp;
  //insert插入有好几种
  //第一种
  mp.insert(pair<int,int>(1,10));  //插入时要插入成对数用pair
  //第二种
  mp.insert(make_pair(2,20));
  //第三种
  mp.insert(map<int,int>::value_type(3,30));
  //第四种
  mp[4] = 40;  //不太推荐用[]来插入,一旦用[]会默认赋值0
  //也可以通过用[]中放入key找到value
  cout<<mp[2]<<endl;
  PrintMap(mp);
  //删除单个用迭代器所指的方向
  mp.erase(mp.begin());
  PrintMap(mp);
  //也可以根据key值删除单个
  mp.erase(3);
  PrintMap(mp);
  //也可以删迭代器所指区间
  //mp.erase(mp.begin(),mp.end());
  //或者用clear()
  mp.clear();
  PrintMap(mp);
}
int main()
{
  test();
  system("pause");
  return 0;
}



运行结果:



———————————————————————————————————


4.map的查找与统计


find(key) //找到的话返回该键元素的迭代器,没有找到返回mp.end()

count(key) //统计数量,因为map中没有重复的key值,所以只能返回0或1


例子:


#include <iostream>
using namespace std;
#include <map>
void test()
{
  map<int,int> mp;
  mp.insert(pair<int,int>(1,10));  //插入两组键值对
  mp.insert(make_pair(1,20));
  map<int,int>::iterator it = mp.find(1);  //find会返回指向对应位置的迭代器,没有找到返回mp.end()
  if(it != mp.end())   //如果不等说明找到了
  {
  cout<<"找到该元素key:"<<it->first<<" value:"<<it->second<<endl;
  }
  else
  {
  cout<<"未找到该元素"<<endl;
  }
  cout<<"key为1的元素数量:"<<mp.count(1)<<endl;  //因为map容器中没有重复的key值对,所以结果只有1或0
}
int main()
{
  test();
  system("pause");
  return 0;
}



运行结果:



———————————————————————————————————


5.map的排序


要自定义一个仿函数,自定义规则降序排序


例子:


#include <iostream>
using namespace std;
#include <map>
class MyCompare
{
public:
  bool operator()(int v,int v1)  //写一个仿函数,自定义排序规则
  {
  return v>v1;
  }
};
void test()
{
  map<int,int,MyCompare> mp;
  mp.insert(pair<int,int>(1,10));  //插入两组键值对
  mp.insert(pair<int,int>(2,20));
  mp.insert(pair<int,int>(5,50));
  mp.insert(pair<int,int>(4,40));
  mp.insert(pair<int,int>(3,30));
  //遍历
  for(map<int,int>::iterator it = mp.begin();it!=mp.end();it++)
  {
  cout<<"key:"<<it->first<<" value:"<<it->second<<endl;
  }
}
int main()
{
  test();
  system("pause");
  return 0;
}



运行结果:


相关文章
|
8月前
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
461 73
|
5月前
|
存储 编译器 容器
set、map、multiset、multimap的介绍及使用以及区别,注意事项
set是按照一定次序存储元素的容器,使用set的迭代器遍历set中的元素,可以得到有序序列。set当中存储元素的value都是唯一的,不可以重复,因此可以使用set进行去重。set默认是升序的,但是其内部默认不是按照大于比较,而是按照小于比较。set中的元素不能被修改,因为set在底层是用二叉搜索树来实现的,若是对二叉搜索树当中某个结点的值进行了修改,那么这棵树将不再是二叉搜索树。
245 0
|
存储 自然语言处理 C++
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
125 0
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
|
存储 C++ 索引
C++基础知识(八:STL标准库 Map和multimap )
C++ 标准模板库(STL)中的 map 容器是一种非常有用的关联容器,用于存储键值对(key-value pairs)。在 map 中,每个元素都由一个键和一个值组成,其中键是唯一的,而值则可以重复。
256 0
|
C++ 容器
C++ STL标准库 《map容器详解》
C++ STL标准库 《map容器详解》
136 0
|
存储 C++ 容器
C++ STL标准库 《map容器详解》
C++ STL标准库 《map容器详解》
292 0
|
C++ 容器
C++之map/multimap容器
C++之map/multimap容器
189 0
|
编译器 C++ 容器
通过红黑树封装 map 和 set 容器
通过红黑树封装 map 和 set 容器
|
3月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
768 108