C++中map的用法

简介: ⭐一、map的简介map是C++STL中的一个关联式容器,它提供一对一的hash,它类似于Python中的字典,也有着键值对(Key-Value)这一说。我们可以通过键(Key)来找到值(Value),但需要注意的是,每个键(Key)只能在map中出现一次哦!map可以储存多种类型的数据,它主要用于一对一映射的情况,map内部的实现是通过自建一颗红黑树,这颗树可以对数据进行自动排序。所以在map内部所有的数据都是有序的,这个功能以后可以方便我们解决很多问题。

⭐一、map的简介

map是C++STL中的一个关联式容器,它提供一对一的hash,它类似于Python中的字典,也有着键值对(Key-Value)这一说。我们可以通过键(Key)来找到值(Value),但需要注意的是,每个键(Key)只能在map中出现一次哦!

map可以储存多种类型的数据,它主要用于一对一映射的情况,map内部的实现是通过自建一颗红黑树,这颗树可以对数据进行自动排序。所以在map内部所有的数据都是有序的,这个功能以后可以方便我们解决很多问题。

使用map时需要包含头文件:

#include<map>

⭐二、map的定义及初始化

  • 定义
    map<数据类型1,数据类型2>变量名
    例:
//map的定义 
map<int,int> m1; //定义一个Key数据类型为int,Value数据类型为int的map容器m1 
map<double,double> m2; //定义一个Key数据类型为double,Value数据类型为double的map容器m2 
map<int,string> m3; //定义一个Key数据类型为int,Value数据类型为string的map容器m3

⭐三、map中常用的成员函数

map中的一些函数:

//map中的常用函数
find()  //返回键Key所在的位置(迭代器)
insert() //向map中插入元素
1. m1.insert(pair<int,string>(1,"ctx"));  //插入一个pair对象 
2. m1.insert(map<int,sting>::value_type(2,"cxt")); //插入一个value_type数据
3. m1[111]="66666"; //用“数组赋值”的方法插入 
erase() //删除元素
1. m2.erase(it); //it为被删除元素的迭代器
2. m2.erase(key);//key为被删除的键
3. m2.erase(first,last); //删除区间内的所有元素
size() //返回map中映射的对数
clear()//清空map中的所有元素
begin() //返回指向map头部的迭代器
end() //返回指向map尾部+1的迭代器
rebegin() //返回指向map尾部的迭代器
rend() //返回指向map头部-1的迭代器
empty() //判断是否为空 

⭐四、map的遍历

  • 通过iterator迭代器遍历
#include<iostream>
#include<map>
using namespace std;
int main()
{
  map<int,string> m1;
  m1[1]="ctx";
  m1[2]="cxt";
  m1[3]="txc";
  m1[10]="txt";
  m1[5]="666";
  map<int,string>::iterator it;
  for(it=m1.begin();it!=m1.end();it++)
  {
    cout<<it->first<<" "<<it->second<<endl;
  }
  //it->为Key,it->second为Value 
}

⭐五、map的真题巩固

下面是PTA中数据结构与算法题目集(中文)的一道25分题,对于我们刚学习完本文map用法后的小伙伴来说可能稍有难度,可以自己尝试一下喔!

下方为题目链接!!!!!!!!

题目详情:

假设全校有最多40000名学生和最多2500门课程。现给出每门课的选课学生名单,要求输出每个前来查询的学生的选课清单。注意:每门课程的选课人数不可超过 200 人。


输入格式:

输入的第一行是两个正整数:N(≤40000),为前来查询课表的学生总数;K(≤2500),为总课程数。此后顺序给出课程1到K的选课学生名单。格式为:对每一门课,首先在一行中输出课程编号(简单起见,课程从1到K编号)和选课学生总数(之间用空格分隔),之后在第二行给出学生名单,相邻两个学生名字用1个空格分隔。学生姓名由3个大写英文字母+1位数字组成。选课信息之后,在一行内给出了N个前来查询课表的学生的名字,相邻两个学生名字用1个空格分隔。


输出格式:

对每位前来查询课表的学生,首先输出其名字,随后在同一行中输出一个正整数C,代表该生所选的课程门数,随后按递增顺序输出C个课程的编号。相邻数据用1个空格分隔,注意行末不能输出多余空格。


输入样例:

10 5

1 4

ANN0 BOB5 JAY9 LOR6

2 7

ANN0 BOB5 FRA8 JAY9 JOE4 KAT3 LOR6

3 1

BOB5

4 7

BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1

5 9

AMY7 ANN0 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1

ZOE1 ANN0 BOB5 JOE4 JAY9 FRA8 DON2 AMY7 KAT3 LOR6

输出样例:

ZOE1 2 4 5

ANN0 3 1 2 5

BOB5 5 1 2 3 4 5

JOE4 1 2

JAY9 4 1 2 4 5

FRA8 3 2 4 5

DON2 2 4 5

AMY7 1 5

KAT3 3 2 4 5

LOR6 4 1 2 4 5


AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
  map<string,vector<int>>mp;
  int n,k;
  cin>>n>>k;
  int l,r;
  string s;
  s.resize(5);
  for(int i=1;i<=k;i++)
  {
    cin>>l>>r;
    for(int j=1;j<=r;j++)
    {
      cin>>s;
      mp[s].push_back(l);
    }
  }
  while(scanf("%s",&s[0])!=EOF)
  {
    cout<<s<<" "<<mp[s].size();
    if(mp[s].size())
    {
      sort(mp[s].begin(),mp[s].end());
      for(auto it=mp[s].begin();it!=mp[s].end();it++)
      {
        cout<<" "<<*it;
      }
    }
    cout<<endl;
  }
}

⭐六、写在最后

OK本文的学习就到此结束啦,希望本文可以帮助到各位有需要的小伙伴们喔,也希望各位小伙伴们不要吝惜手里的三连哦!❤️❤️❤️

💕 回头看,轻舟已过万重山,向前看,前路漫漫亦漫漫。


相关文章
|
10天前
|
C++ 容器
【C++】红黑树模拟实现STL中的map与set
【C++】红黑树模拟实现STL中的map与set
|
10天前
|
算法 测试技术 C++
【C++】map&set的底层结构 -- AVL树(高度平衡二叉搜索树)(下)
【C++】map&set的底层结构 -- AVL树(高度平衡二叉搜索树)(下)
|
10天前
|
C++ 容器
【C++】map&set的底层结构 -- AVL树(高度平衡二叉搜索树)(上)
【C++】map&set的底层结构 -- AVL树(高度平衡二叉搜索树)(上)
|
10天前
|
存储 C++ 容器
【C++】Map和Set -- 详解(下)
【C++】Map和Set -- 详解(下)
|
1天前
|
存储 C++ 容器
C++标准库容器的基本用法
C++标准库容器的基本用法
5 0
|
3天前
|
C语言
从C语言到C++_29(红黑树封装set和map)红黑树迭代器的实现(下)
从C语言到C++_29(红黑树封装set和map)红黑树迭代器的实现
14 3
|
3天前
|
编译器 测试技术 C语言
从C语言到C++_29(红黑树封装set和map)红黑树迭代器的实现(上)
从C语言到C++_29(红黑树封装set和map)红黑树迭代器的实现
7 0
|
3天前
|
存储 C语言 容器
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(下)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
18 1
|
3天前
|
存储 C语言 容器
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(中)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
18 1
|
3天前
|
存储 自然语言处理 C语言
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(上)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
21 1