0
点赞
收藏
分享

微信扫一扫

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


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

文章目录

  • ​​一、前言​​
  • ​​二、map的定义​​
  • ​​三、map的常用函数​​
  • ​​四、map的遍历方法​​
  • ​​五、map的自定义排序​​
  • ​​六、multimap​​
  • ​​七、unordered_map​​
  • ​​八、unordered_mulimap​​
  • ​​最后​​

一、前言

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

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

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

二、map的定义

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

​#include < map >​

<数据类型,数据类型> name;

如:
map<int,int> mp;

map<int,string> mp;

map<string,string>mp;

三、map的常用函数


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

erase();

(1)输入是pair

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

find(); 查找一个数

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

upper_bound(x);

四、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()

不支持迭代器

最后

莫言真理无穷尽,寸进自有寸进欢

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



举报

相关推荐

0 条评论