c++学习 关联容器 map multimap

复杂度分析:

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;
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值