STL map的学习心得

一、STL map [ ]和insert的差别

参考https://blog.csdn.net/houzhuoming1/article/details/49508461

参考http://www.cnblogs.com/kex1n/archive/2011/11/16/2251520.html

STL中的map是一个key-value的数据结构 ,每一个key对应着一个值,而且key是唯一的,底层采用红黑树的数据结构实现。在使用map的过程中,有两种方式进行数据的插入,第一种是使用下标的方式,也就是[],第二种是使用insert接口,它们主要的区别如下:

  1. 下标的方式插入,如果原本key不存在则会先创建对应的记录,然后再进行赋值;
  2. insert方式插入,如果key不存在,则插入记录,如果存在则什么都不做。
    map<int, char> m;
    m[1] = 'a';  // 首先初始化话m[1],然后在给m[1]赋值为'a'
    m[1] = 'b';  // **修改m[1]的值为'b'**
    m.insert<pair<int, char>(2, 'c')> // key=2不存在,则插入该记录,m[2]的值为'c'
    m.insert<pair<int, char>(2, 'd')> // **key=2存在,则什么也不做,m[2]的值仍为'c'**
    

    在map中插入元素

    改变map中的条目非常简单,因为map类已经对[]操作符进行了重载

    enumMap[1] = "One";
    enumMap[2] = "Two";
    .....

    这样非常直观,但存在一个性能的问题。插入2时,先在enumMap中查找主键为2的项,没发现,然后将一个新的对象插入enumMap,键是2,值是一个空字符串,插入完成后,将字符串赋为"Two"; 该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。我们可以用以下方法来避免开销:

    enumMap.insert(map<int, CString> :: value_type(2, "Two"))

    insert()方法:若插入的元素的键值已经存在于map中,那么插入就会失败,不会修改元素的键对应的值;若键值在map中查不到,那么就会将该新元素加到map中去。

    下标[key]方法:若插入元素的键值已经存在于map中,那么会更新该键值对应的值为新的元素的值;若该键值在map中找不到,那么就会新建一个键值为该键(key)的元素,并将key对应的值赋值为默认值(默认构造函数生成的对象)。

猜你喜欢

转载自blog.csdn.net/qq_41626975/article/details/81431425
今日推荐