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;
}



运行结果:


相关文章
|
6月前
|
存储 C++ 索引
|
7月前
|
存储 自然语言处理 C++
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
51 0
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
|
7月前
|
存储 算法 NoSQL
C++一分钟之-map与set容器详解
【6月更文挑战第21天】C++ STL的`map`和`set`是基于红黑树的关联容器,提供有序存储和高效查找。`map`存储键值对,键唯一,值可重复;`set`仅存储唯一键。两者操作时间复杂度为O(log n)。常见问题包括键的唯一性和迭代器稳定性。自定义比较函数可用于定制排序规则,内存管理需注意适时释放。理解和善用这些工具能提升代码效率。
77 3
|
6月前
|
存储 C++ 索引
C++基础知识(八:STL标准库 Map和multimap )
C++ 标准模板库(STL)中的 map 容器是一种非常有用的关联容器,用于存储键值对(key-value pairs)。在 map 中,每个元素都由一个键和一个值组成,其中键是唯一的,而值则可以重复。
|
7月前
|
C++ 容器
C++ STL标准库 《map容器详解》
C++ STL标准库 《map容器详解》
52 0
|
7月前
|
存储 C++ 容器
C++ STL标准库 《map容器详解》
C++ STL标准库 《map容器详解》
103 0
|
7月前
|
C++ 容器
C++之map/multimap容器
C++之map/multimap容器
|
7月前
|
编译器 C++ 容器
通过红黑树封装 map 和 set 容器
通过红黑树封装 map 和 set 容器
|
4月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
4月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用