STL中set和map
set 可以认为是数学上的集合,集合中的元素不允许有重复。set特有的操作是高效的插入、删除和执行基本查找。
set的插入方法是 insert,由于集合元素的唯一性,insert操作不一定会成功,insert操作返回的是一个比较复杂的类型,是一个指示插入位置和插入是否成功的复合类型。STL中定义了一个名称为pair的模板,该类模是:
pair<iterator,bool> insert( const Object & x );
pair<iterator,bool> insert( iterator hint,const Object & x );
一般情况下,双参数的insert由于指定了位置,其执行速度要比单参数的函数执行速度快。
set的删除操作有以下三种:
int erase( const object & x); 找到并删除该元素,返回删除元素的个数(0 或者 1)
iterator erase( iterator itr) ; 删除该迭代器指向的元素。
Iterator erase(iterator start, iterator end ); 删除一个区间内的元素,不包括尾部元素。
set 支持的查找操作是:
iterator find( const Object & x );
map 容器
map用来存储排序后的由键(key)和值(value)组成的项的集合。但是多个键可以共同对应一个值,因此,值不需要唯一,在map中的键保持逻辑排序后的顺序。Map 和 python中的字典是一样的道理。
Map 中存储的元素都是
Pair<KeyType,ValueTyep> 的形式。Map 的迭代器指向的也是这么一个对。
在map中执行查找操作可以使用[ ]运算符。
ValueType & operator[ ] (const KeyType & key );
STL中set和map的更多相关文章
- STL中stack/queue/map以及Boost unordered_map 的使用方法
一.stackstack 模板类的定义在<stack>头文件中.stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型 ...
- C/C++知识要点2——STL中Vector、Map、Set容器的实现原理
1.Vector是顺序容器.是一个动态数组.支持随机存取.插入.删除.查找等操作,在内存中是一块连续的空间.在原有空间不够情况下自己主动分配空间.添加为原来的两倍.vector随机存取效率高,可是在v ...
- STL中vector,Map,Set的实现原理
vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元 ...
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
序列性容器::(vector和list和deque) erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被 删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方 式, ...
- 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与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用法
Map是 STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于 这个特性,它完成有可能在我们处理一对一数据的 ...
随机推荐
- css设置:图片文字等不能被选择
-webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;
- org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.
当我用Springboot和mybatis进行延迟加载时候报出如下的错误: org.apache.ibatis.executor.loader.javassist.JavassistProxyFact ...
- eclipse 首次使用配置
这里是eclipse neo版本的配置 1.设置workspace 首次启动,选择指定的工作空间(workspace),用于存放java代码.
- 【JQuery源码】事件绑定
事件绑定的方式有很多种.使用了jQuery那么原来那种绑定方式(elem.click = function(){...})就不推荐了,原因? 最主要的一个原因是elem.click = fn这种方式只 ...
- 3DES在Android、Ios 和Java 平台的加密解密
DES简介: DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法, 算法的入口参数有三个:Key.Data.Mode. K ...
- 在 Vuejs 项目中如何定义全局变量 全局函数
在 Vuejs 项目中如何定义全局变量 全局函数 在项目中,经常有些函数和变量是需要复用,比如说网站服务器地址,从后台拿到的:用户的登录 token, 用户的地址信息等,这时候就需要设置一波全局变量和 ...
- SearchView去掉下划线
SearchView calSearchView = (SearchView) findViewById(R.id.sv_search_text); if (calSearchView != null ...
- Eclipse中Maven项目出现红色感叹号问题
在Eclipse环境下,有时我们会遇到Maven项目出现红色感叹号的情形,而一旦项目出现感叹号,Eclipse便无法帮我们进行自动编译等工作,尽管有时候不会影响运行,但每次只能手动启动Maven重新编 ...
- android学习-ndk-build(androidstudio编译cocos2d-x库的cpp为so文件的解释)
本文不作为ndk初学使用,只是对cpp等c++文件编译成so文件的过程中,参数含义,及ndk配置的解释.使用的技术比较旧. androidStudio使用gradle调用ndk-build工具编译c+ ...
- Nodejs学习笔记(十六)—Pomelo介绍&入门
前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...