关于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了。
关于STL的map的注意事项的更多相关文章
- C++STL之map的基本操作
STL中基本的关联式容器有map和set,它们都是以红黑树作为其底层的结构,具有非常高的查找.删除效率,内容会按照键值自动排序. 使用map的注意事项: 1.关联式容器的键值是不允许修改的,所以永远不 ...
- C++ STL中Map的按Key排序和按Value排序
map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区 分),我们用map来进 ...
- STL中map与hash_map的比较
1. map : C++的STL中map是使用树来做查找算法; 时间复杂度:O(log2N) 2. hash_map : 使用hash表来排列配对,hash表是使用关键字来计算表位置; 时间复杂度:O ...
- STL中map,set的基本用法示例
本文主要是使用了STL中德map和set两个容器,使用了它们本身的一些功能函数(包括迭代器),介绍了它们的基本使用方式,是一个使用熟悉的过程. map的基本使用: #include "std ...
- STL中map与hash_map容器的选择收藏
这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自al ...
- C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET
C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET C++ STL中Map的相关排序操作:按Key排序和按Value排序 分类: C ...
- STL之map排序
描述 STL的map中存储了字符串以及对应出现的次数,请分别根据字符串顺序从小到大排序和出现次数从小到大排序. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { ...
- C++中的STL中map用法详解(转)
原文地址: https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html C++中的STL中map用法详解 Map是STL的一个关联容器,它提供 ...
- C++ STL中Map的按Key排序跟按Value排序
C++ STL中Map的按Key排序和按Value排序 map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定 ...
随机推荐
- JS的深度克隆,利用构造函数原型深度克隆
我爱撸码,撸码使我感到快乐!大家好,我是Counter.今天来写写,JS中的深度克隆,这个在笔面试中,考的还是比较多的,主要是对象与数组的赋值,如果直接赋值的话,那么得到的是对象或者数组在堆里的地址, ...
- server.xml引入子文件配置(tomcat虚拟主机)
在配置tomcat虚拟主机时候,如何每一个虚拟主机写成单独文件,server.xml包含这些子文件? 如以下<OneinStack>中,添加JAVA环境虚拟主机后tomcat配置文件详情: ...
- 转载redis持久化的几种方式
redis持久化的几种方式 1.前言 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服 ...
- Ubuntu 下将 svg 图片转换为其他格式 (如 png)
参考 How to Convert SVG Files to other Image Formats on Ubuntu 12.04/11.10 Ubuntu 下将 svg 图片转换为其他格式 (如 ...
- js回调函数以及同步与异步
1. 背景介绍javascript的单线程特性由于javascript语言是一门“单线程”的语言,所以,javascript就像一条流水线,仅仅是一条流水线而已,要么加工,要么包装,不能同时进行多个任 ...
- 【搬运工】linux下创建用户(一)
转载:http://www.cnblogs.com/ylan2009/articles/2321177.html linux下创建用户(一) Linux 系统是一个多用户多任务的分时操作系统,任何一个 ...
- 最近在写h5的页面,发现有一款框架还不错给大家推荐一下
wui 说一下自己写项目的体会吧,自我感觉wui还不错,能够让自己很快地把页面布局好,而且里面一些js效果也不用自己去手写jQuery代码很方便,下面让我们一起来认识一下wui这个框架吧 1,acco ...
- ACM-ICPC2018南京赛区 Mediocre String Problem
Mediocre String Problem 题解: 很容易想到将第一个串反过来,然后对于s串的每个位置可以求出t的前缀和它匹配了多少个(EXKMP 或者 二分+hash). 然后剩下的就是要处理以 ...
- ps使用经验
- 第 8 章 容器网络 - 072 - 一文搞懂各种 Docker 网络
Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上. 跨主机网络方案: Docker Over ...