map 用法总结

本文详细介绍了C++ STL中的map容器,包括map的简介、功能、添加元素、排序、查找以及多种使用示例,如计数、排序、查找等。map是一个有序的键值对集合,不允许键重复,提供了丰富的操作函数,如insert、find、count等。通过实例展示了map在处理数据时的灵活性。
摘要由CSDN通过智能技术生成

参考资料:
1、C++ map用法总结
2、map的基本操作
3、关于哈希表,你该了解这些

1 map简介

map 是STL的一个关联容器,提供一对一的hash
1.1 第一个可以称为关键字(key),每个关键字只能在map中出现一次;
1.2 第二个可以称为该关键字的值(value);
1.3 参考代码随想录中对哈希表的介绍
在这里插入图片描述
在这里插入图片描述

2 map功能

2.1 自动建立key - value 的对应,key 和value 可以是任意需要的类型,包括自定义类型。
2.2 map是有序的,会按照关键字从小到大进行排序,如果关键字是字符串,会按照第一个字符的大小进行排序,从A到Z(a 到 z); 可运行3.1的代码进行理解。

3 使用map

3.1 向map添加元素

一共有四种方式

    mmap.insert(pair<string,int>("fsdfads", 43));//第一种插入方式
    mmap.insert(map<string, int>::value_type("fsdf", 5));//第二种
    mmap["fsdff"] = 3;//第三种
    mmap.insert({
    "fsd",4 });//第四种

注意从hash表里取值是随机的?
在这里插入图片描述

后面用的是第四种方式进行介绍

#include <iostream>
#include <string>
#include <map>
#include <algorithm>

using namespace std;

int main() {
   
	map<string, int> Mmap;
	Mmap.insert({
    "yi", 2 });
	Mmap.insert({
    "er", 3 });
	Mmap.insert({
    "yi", 4 });
	Mmap.insert({
    "er", 5 });
	for (auto it : Mmap) {
   
		cout << it.first << " " << it.second << endl;
	}
	return 0;
}

在这里插入图片描述

3.1.1 不会重复插入相同key

从3.1的运行结果我们可以知道,Mmap的第三条和第四条插入语句时没法插入成功的,因为前面已经对相同键值做过了插入操作,后面就不会再插入了。

3.1.2 重复插入相同key,原key对应的value值不变

如果想要四条语句都插入成功可以考虑用multimap,multimap是可以存在重复键值的,下面是验证程序
在这里插入图片描述

3.1.3 插入相同key,value值改变

map容器最常用的方法——kv对计数,如果插入的元素还没存在就插入,并给value赋值为1,如果插入的元素已经存在就不再插入而是给对应的键的值加1

#include <iostream>
#include <string>
#include <map>
#include <algorithm>

using namespace std;

int main() {
   
	map<string, int> Mmap;
	string s;
	while (cin >> s) {
   
		Mmap[s] ++; //s是键值key,这里是指如果s已经存在于Mmap中,则该key对应的value值加一
	}
	for (auto it : Mmap) {
   
		cout << it.first << " " << it.second << endl;
	}
	return 0;
}

这里要停止输入需要按:Ctrl+z,才能跳到for循环进行输出
在这里插入图片描述

3.2 对map中的value进行排序

#include <iostream>
#include <string>
#include <map>
#include <algorithm>
#
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值