zoukankan      html  css  js  c++  java
  • 关于STL的map的注意事项

    关于map是什么,这里就不多叙述了。

    直接正题,常用的map插入操作有三种方法:通过pair<key_type,value_type>、通过value_type插入数据、还有一种类似于数组的形式插入数据,关键字就是数组下标。

    关于三种插入方式的区别:前两者的效果是一样的,但是由于数据集合唯一性,如果一个key对应的value上有值的话,那么再次往这个key上插入一个新的value会失败,

    可以使用pair模板类型进行测试。

    由于map是有序的,所以查找的话可以直接使用key进行查找,比如说find(key)就可以查到key对应的value了,find函数如果查到就返回对应的迭代器的位置,若没找到就是返回end()函数的位置。

    使用迭代器获取map中的数据,其数据类型是一个std::pair对象,包括first成员和second成员,对应的是key和value。

    lower_bound():用于返回key关键字在map中的下界;

    upper_bound():用于返回key关键字在map中的上界;

    理解:若找到key,那么两个函数都是返回他们的对应的迭代器,若没找到,那么lower_bound函数返回距离查找的key最近的下界的那个key对应的迭代器,upper_bound与此相反。

    Equal_range():返回一个std::pair对象,它有三个参数,前两个是指定序列的正向迭代器,最后一个参数是要查询的元素,其first指向的是不小于第三个参数的一个元素,second指向的是不大于第三个参数的一个元素。

    可以理解为:在第一个迭代器与第二个迭代器之间找第三个元素的值。

    移除map中的某个条目使用erase(),它有一个函数形式如下

    size_type erase(const Key&key);//通过关键字删除

    若使用clear()函数删除,那么相当于erase函数的另一个形式的使用:erase(map.begin(),map.end());//范围删除

    map的swap函数,不是一个容器中的元素交换,而是两个容器所有元素的交换。

    STL中的排序默认是使用小于号排序的,map本身是有序的,按照key从小到大进行排序,如果key是结构体的话,这时候的排序问题,可以通过两种方式解决,一种是重载小于号,另一种可以使用仿函数。

    ==========================================================性能比较来源于https://blog.csdn.net/a418382926/article/details/22302907================================================

    map和hash_map性能比较总结:

    hash_map的添加和删除操作比map要慢,尤其是删除操作hash_map比map可能慢1000倍;从而得到结论是删除和插入操作较多的情况下,map比hash_map的性能更好,添加和删除的数据量越大越明显。

    map的遍历性能高于hash_map,而查找性能则相反,hash_map比map要好,数据量越大查找次数越多,表现就越好。

    一般应用情况下,我们保存的数据不超过100万份,查找的频繁程度不高情况下使用map性能比较好;而保存的数据较多时(超过100万),查找频繁时使用hash_map的性能就高于map了。

  • 相关阅读:
    kafka 支持发布订阅
    linux 安装 ORACLE JDK 8
    SPRING 集成 KAFKA 发送消息
    安装kafka 集群 步骤
    zookeeper 单机集成部署
    CAS 界面根据不同的域名显示不同的界面
    POSTMAN 数据关联
    Google Code Jam 2014 Round 1B Problem B
    hdu3555
    hdu2089
  • 原文地址:https://www.cnblogs.com/Dark-King/p/10093221.html
Copyright © 2011-2022 走看看