c++常用的数据结构之一  std::map

 

1.什么是map?    std::map是包含具有唯一键的键值对的排序关联容器。按照使用比较功能对密钥进行排序Compare。搜索,删除和插入操作具有对数复杂性。map通常实现为红黑树。

2.map如何按照键排序?        在map的实现中,已经提供给使用者进行排序的参数。map的实现如下:
    template<class _Kty,
    class _Ty,
    class _Pr = less<_Kty>,
    class _Alloc = allocator<pair<const _Kty, _Ty> > >
    class map
        : public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false> >{}

    缺省参数_Pr 的参数是less<_Kty>,map就是通过这个方法进行排序的

3.如何不让map排序?        由map实现就可以看出,只要我们提供一个仿函数,函数里面重载(),重载里面什么操作都不做就可以

4.map如何按照key值来取值?          在map类中,重载了[],利用 map[key]就可以取到对应的值

5. map如何按照索引取值? (这里面的索引指的是位置)        在map里面,实现了一个方法at,基本容易都会提供这个方法,这个方法可以根据位置获取到值。实现原理就是,遍历红黑树,如果父节点所在的位置和索引相等,则返回值

6.map是不是线程安全?        map不是线程安全的,在stl中,大部分都不是线程安全的

7.如何设计一个线程安全的map?    最简单的方法就是用互斥量,通用方法是读写锁

8.剩下的对于map来说,就是它的api了,值得注意的是在c++11之后,成员方法后面带emplace的,都是效率更高的方法    

转载于:https://my.oschina.net/OkamiLiu/blog/1560034

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值