STL之map,multimap

  • 头文件及声明
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <map>

    namespace std
    {
    template <typename Key, typename T,
    typename Compare = less<key>,
    typename Allocator = allocator<pair<const Key, T>>>
    class map;

    template <typename Key, typename T,
    typename Compare = less<key>,
    typename Allocator = allocator<pair<const Key, T>>>
    class multimap;
    }
  • 插入,删除

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    std::map<std::string, float> coll; 
    /*
    1.用初始化列表。
    */
    coll.insert( {"otto", 22.3 } );
    /*
    2.使用value_type
    */
    coll.insert(std::map<std::string, float>::value_type("otto", 22.3));

    /*
    3.使用pair<>
    */
    coll.insert(std::pair<std::string, float>("otto", 22.3));

    /*
    4.使用make_pair()
    */
    coll.insert(std::make_pair("otto", 22.3));

    /*
    insert(val)对于map来讲依然返回一个pair<iterator, bool>类型的值。
    */
  • 使用[]的缺点

  1. 当你想要查询一个key-value是否存在时,无意插入了一个值,比如cout << coll["aa"],但是并没有这个key-value,这样会插入一个aa的key,value是0.
  2. 使用[]速度慢,因为先要将value初始化为0,然后再用新的值覆盖。