知识点总结(2022\12\6学习)(2022\12\7写)(map)

本文详细介绍了C++ STL中的map容器,包括其特点、基本操作和使用方法,并通过一个具体的统计数字题目实例展示了map的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、map函数

1、map的特点

map是STL的一个关联容器,原型是红黑树,调用需要用到迭代器
请添加图片描述

2、map的使用

(1)map的头文件
#include <map>
(2)map的定义
map<int,int> s;//第一个定义的是关键字,第二个是值,这里是定义了一个名为s的map
map<int,int>::iterator iter;//这里定义了一个名为iter的迭代器
//注意,迭代器与map定义的关键字和值的定义的类型要相同
(3)存入值到map中
 s[x]++;//将s[]中x项+1个值
 s[x]+=i;//将s[]中x项+i个值
 //注:如果map中没有这一项,map会自己创建一个新的项
(4)读出map中的值
for(iter=s.begin();iter!=s.end();iter++){//iter是迭代器,用于定位map中值的位置
        printf("%d %d\n",iter->first,iter->second);//first是项数,second是iter项的值
    }
//次段代码意为,取出map中所有的项的项数和值

如:
请添加图片描述

5)读出map的长度
s.size();//跟求字符串长度差不多

应用题目

1、统计数字
题目
存限制:128 MiB
时间限制:1000 ms
输入文件:B.in
输出文件:B.out
题目类型:传统
评测方式:文本比较

题目描述
某次科研调查时得到了n个自然数,每个数均不超过1500000000。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

输入格式
第1行为1个正整数n,表示有n个整数;2行有n个用空格隔开的自然数。

输出格式
由小到大输出每个数出现的次数。

样例
样例输入
8 
2 4 2 4 5 100 2 100 
样例输出
2 3 
4 2 
5 1 
100 2 
开始解题

读题后可得输入有两行,第一行一个数,表示输入的数量,第二行表示输入的n个自数。最后要输出每个数的个数,这里就可以用到map来存储,记录数和数量,用map会比数组更方便。
综上程序就可以先读入n,然后在用for循环来读入一个数x,接着把map中的x项++,最后用it迭代器把位置和数量取出就行了。
对了,这道题是文件输入输出,要用freopen
上代码

上代码
#include <bits/stdc++.h>
using namespace std;
map<int,int>m;//定义map
map<int,int>::iterator it;
int n,x;
int main()
{
    freopen("B.in","r",stdin);//文件输入输出
    freopen("B.out","w",stdout);
    scanf("%d",&n);//读入n
    for(int i=1;i<=n;i++){
        scanf("%d",&x);//读入n个数
        m[x]++;//将数存入map中
    }
    for(it=m.begin();it!=m.end();it++){
        printf("%d %d\n",it->first,it->second);//输出数和数量
    }
    return 0;
}

map的更多用法

begin()         //返回指向map头部的迭代器
clear()         //删除所有元素
count()         //返回指定元素出现的次数
empty()         //如果map为空则返回true
end()           //返回指向map末尾的迭代器
equal_range()   //返回特殊条目的迭代器对
erase()         //删除一个元素
find()          //查找一个元素
get_allocator() //返回map的配置器
insert()        //插入元素
key_comp()      //返回比较元素key的函数
lower_bound()   //返回键值≥给定元素的第一个位置
max_size()      //返回可以容纳的最大元素个数
rbegin()        //返回一个指向map尾部的逆向迭代器
rend()          //返回一个指向map头部的逆向迭代器
size()          //返回map中元素的个数
swap()          //交换两个map
upper_bound()   //返回键值>给定元素的第一个位置
value_comp()    //返回比较元素value的函数

参考资料:

https://blog.youkuaiyun.com/sevenjoin/article/details/81943864?spm=1001.2014.3001.5506
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值