#2020寒假集训#C++STL-map代码笔记

#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>//万能头文件 
#include<map>//map头文件
#include<string>
using namespace std;
int main()
{
	printf("\n");
	map<string,int> m;
	/*
		按键自动升序的映射
		键有唯一性,不能对应多个值
		但可以多个键指向同一个值 
	*/
	string put;
	printf("请输入10个可重复string作为键:");
	//备用输入:kk zxl kk yr zxl kk zxl yr kk yr 
	for(int i=0;i<10;i++)
	{
		cin>>put;
		m[put]++;
	}
	printf("\n");
	for(map<string,int>::iterator it=m.begin();it!=m.end();it++)
	{
		if(it!=m.begin()) printf(" ");
		else printf("正遍历输出每个string出现的次数:");
		cout<<it->first<<" "<<it->second;
	}//it->first指键,it->second指值 
	cout<<endl<<endl;
	/*
		注意此时的输出顺序是按照键排列的
		如string的字典序,默认升序
		map内部原理是红黑树,也是一种二叉搜索树
	*/
	for(map<string,int>::reverse_iterator rit=m.rbegin();rit!=m.rend();rit++)
	{
		if(rit!=m.rbegin()) printf(" ");
		else printf("反向迭代器遍历输出每个string出现的次数:");
		cout<<rit->first<<" "<<rit->second;
	}
	cout<<endl<<endl;
	m.erase(m.find("zxl"));
	for(map<string,int>::iterator it=m.begin();it!=m.end();it++)
	{
		if(it!=m.begin()) printf(" ");
		else printf("删除键为zxl的一对映射(find找迭代器,erase删)后:");
		cout<<it->first<<" "<<it->second;
	}//m.find(key)返回键为key的映射的迭代器,然后可以用m.erase(it)删除这对映射 
	cout<<endl<<endl;
	m.erase("yr");
	for(map<string,int>::iterator it=m.begin();it!=m.end();it++)
	{
		if(it!=m.begin()) printf(" ");
		else printf("m.erase(key)直接删除键为yr的一对映射后:");
		cout<<it->first<<" "<<it->second;
	}//m.erase(key)也可以直接删除键为key的这对映射 
	cout<<endl<<endl;
	printf("用m.clear();清空前用size输出映射对数:%d\n\n",m.size()); 
	m.clear();//非常重要!!!尤其循环的末尾,不要忘记清空!!!
	printf("用m.clear();清空后用size输出映射对数:%d\n\n",m.size()); 
	/*
		m.clear();功效类似于 m.erase(m.begin(),m.end());
		但erase的括号里面不一定能用+,Dev会报错(如m.begin()+1) 
		
		直接删除迭代器(erase的是it)比删除元素(erase的是键或其他容器同理的值)
		在时间复杂度上更快
	*/
} 

运行结果如下
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值