复杂度分析:
map, set, multimap, and multiset
上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为:
插入: O(logN)
查看:O(logN)
删除:O(logN)
关于[](中括号)和at的区别,如果at访问的元素不存在,程序将会报错.[]则不会有这种情况.
map用中括号访问不存在的元素key,那么会在树中插入一个key/value, value将用default constructor构造
不可行的用法! 尽管3作为key可能存在,也可能不存在,(只有运行时才能确定),但是在编译期,为了保险起见,因为传入的是const,所以不会允许map类型对象中括号访问,从而避免潜在的修改map的风险
multiset, multimap本质也是用红黑树实现
lower_bound的用法
multimap用法展示
特点:存储多个相同的key,利用find可以找到第一个出现key的位置,我们也可以自己设定compare的规则,比如是顺序还是逆序.
/*************************************************************************
> File Name: learn_multimap.cpp
> Author:
> Mail:
> Created Time: Sa 31 Jul 2021 22:18:51 CEST
************************************************************************/
#include <map>
#include<iostream>
#include <string>
using namespace std;
int main()
{
std::multimap<int,string,greater<int>> intmap{{1,"fsdf"},{2,"fsdfs"},{1,"dsfsfsd"}};
for(auto&[key,val]:intmap)
{
cout<<key<<": "<<val<<endl;
}
auto ptr = intmap.find(1);
cout<<"key: "<<ptr->first<<" val: "<<ptr->second<<endl;
}