【c++STL——第九讲】map系列 (常用知识点总结)

ฅ(๑˙o˙๑)ฅ 大家好, 欢迎大家光临我的博客:面向阿尼亚学习
算法学习笔记系列持续更新中~

阿



一、前言

在 C++ 中,map为关联式容器的一种,map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括 C++ 基本数据类型(int、double 等)、使用结构体或类自定义的类型。

map是STL的一个关联容器,它提供一对一的hash。

第一个可以称为关键字(key),每个关键字只能在map中出现一次;
第二个可能称为该关键字的值(value);


二、map的定义

使用map得包含map类所在的头文件

#include < map >

    map<数据类型,数据类型> name;
    
    如:
    map<intint> mp; 
    
​    map<int,string> mp; 

    map<string,string>mp;




三、map的常用函数

insert(); 插入一个数,插入的数是一个pair

erase(); 

​  (1)输入是pair

  (2)输入一个迭代器,删除这个迭代器

find(); 查找一个数

lower_bound(x); 返回大于等于x的最小的数的迭代器

upper_bound(x); 返回大于x的最小的数的迭代器


四、map的遍历方法


​    假设有个map <int,string> s;

​  第一种:

	for(map<string,int>::iterator it=m.begin();; it!=m.end(); it++) {
		cout<<it->first<<" "<<it->second<<endl;
	}
//C++中如果是个结构体(类)类型的指针,那么访问属性不能使用 . ,而是 -> 。map内部其实就是

//pair,其中first存的是被当成下标的部分,second存的是被当成值的部分。

​    第二种:

	for(auto it:m) {
		cout<<it.first<<" "<<it.second<<endl;
	}//C++11的新语法
	

五、map的自定义排序

方法重载<



#include <iostream>

#include <map>
using namespace std;
struct node
{
    int x;
    bool operator<(const node y) const
    {
        return x > y.x;
        // return x < y.x;
    }
};
int main()
{
   
    map<node, int> mp;
    mp.insert({{1}, 2});
    mp.insert({{3}, 1});
    mp.insert({{2}, 2});
    for (auto &i : mp)
    {
        cout << i.first.x << " "<<i.second<<endl;
    }
    return 0;
}

}

输出
3 1
2 2
1 2


六、multimap

multimap容器保存的是有序的键/值对,但是可以保存重复的元素。multimap中会出现具有相同键值的元素序列。multimap大部分成员函数的使用方式和map相同。因为重复键的原因,multimap有一些函数的使用方式和map有一些区别。


七、unordered_map

unordered_map需要引用: #include < unordered_map >

unordered_map是一个关联容器,存储元素时是没有顺序的,只是根据key的哈希值,将元素存在指定位置,所以根据key查找单个value时非常高效,平均可以在常数时间内完成。

unordered_map内部实现了一个哈希表,因此其元素的排列顺序是杂乱的,无序的


对于unordered_map容器,其遍历顺序与创建该容器时输入元素的顺序是不一定一致的,遍历是按照哈希表从前往后依次遍历的

不支持lower_bound()和upper_bound()

不支持迭代器


八、unordered_mulimap

unordered_mulimap集结了以上两种结构的特点

不支持lower_bound()和upper_bound()

不支持迭代器


最后

莫言真理无穷尽,寸进自有寸进欢请添加图片描述

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

quicklysleep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值