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
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞