set容器

C++ STL之set的使用

喜欢而已 提交于 2019-12-27 04:06:12
set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。 平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。 构造set集合主要目的是为了快速检索,不可直接去修改键值。 常用操作: 1.元素插入:insert() 2.中序遍历:类似vector遍历(用迭代器) 3.反向遍历:利用反向迭代器reverse_iterator。 例: set<int> s; ...... set<int>::reverse_iterator rit; for(rit=s.rbegin();rit!=s.rend();rit++) 4.元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。 set<int> s; s.erase(2); //删除键值为2的元素 s.clear(); 5.元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。 set<int> s; set<int>::iterator it; it=s.find(5); //查找键值为5的元素 if(it!=s.end()) /

13 Collection 容器

久未见 提交于 2019-12-26 11:43:54
文章目录 主要的collection特质 可变和不可变的collection 序列Seq 列表 集 Set 添加或去除元素的操作符 常用方法 官方collection教程 所有collection扩展自Iterable特质 三大类,序列,集合,映射 seq set map 对于几乎所有的collection,都提供了可变和不可变的版本 列表要么是空的,要么是一头一尾,尾是列表 集合没有先后次序 + 将元素添加到无先后次序的容器中,+: 和 :+向前或向后追加到序列,++将两个集合串接到一起,-和–移除元素(1个减号和两个减号) Iterable和Seq特质有数十个常见操作方法,很丰富 映射、折叠和拉链 主要的collection特质 下面请欣赏一组图片,注意 蓝底白字(特质trait)和黑底白字(类class),虚线(隐式转换)和粗实线(默认实现)、细实线(通过类实现) 。 图片来源 。 首先是scala.collection scala.collection.immutable scala.collection.mutable 图例 Iterable指的是那些能够交出用来访问集合中所有元素的Iterator的集合 val coll = List ( 2 , 1 , 4 , 3 ) //任意Iterable特质的类 val iter = coll . iterator while

STL中vector,Map,Set的实现原理

一曲冷凌霜 提交于 2019-12-25 22:43:19
Map Map是关联容器,以键值对的形式进行存储,方便进行查找,关键词起到索引的作用,值则表示与索引相关联的数据,以红黑树的结构实现,插入删除等操作都可以在O(log n)时间内完成。 Set Set是关联容器,set中每个元素都只包含一个关键字,set支持高效的关键字查询操作—检查每一个给定的关键字是否在set中,set是以红黑树的平衡二叉检索树结构实现的,支持高效插入删除,插如元素的时候会自动调整二叉树的结构,使得每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值,另外还得保证左子树和右子树的高度相等。 平衡二叉检索树使用中序遍历算法,检索效率高于vector,deque,list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。 构造set集合的主要目的是为了快速检索,不可直接去修改键值 来源: CSDN 作者: 图灵图灵 链接: https://blog.csdn.net/qq_33904512/article/details/103706016

第七章:集合类

北慕城南 提交于 2019-12-24 05:24:53
7.1集合概述 类可以存储任意类型的对象,并且长度可变,统称为集合。这些类都位于java.util包中。 集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map,这两种集合的特点具体如下。 Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是list和set。其中,list的特点是元素有序、元素可重复。set的特点是元素无序并且不可重复。list接口的主要实现类有ArrayList和LinkedList,set接口的主要实现类有HashSet和TreeSet。 Map:双列集合类的根接口,用于存储具有键(Key)、值(Value)映射关系的元素,每个元素都包含一对键值,在使用Map集合时可以通过指定的Key找到对应的value,例如根据一个学生的学号就可以找到对应的学生。Map接口的主要实现类有HashMap和TreeMap。 7.2 Collection接口 Collection是所有单列集合的父接口。 Collection接口的方法 Boolean add(Object o):向集合中添加一个元素 Boolean addAll(Collection c):将指定Collection中的所有元素添加到该集合中 Void clear():删除该集合中的所有元素 Boolean remove(Object

【Java】Java基础

◇◆丶佛笑我妖孽 提交于 2019-12-23 13:48:37
Δ String、StringBuffer 、StringBuilder之间的区别? 1. String 类: Java 提供了 String 类来创建和操作字符串。 用于获取有关对象的信息的方法称为访问器方法。String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数。 String ss = "Hello World!"; int len = ss.length(); 注意:String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类。 2.Java StringBuffer 和 StringBuilder 类 StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。 StringBuffer 是线程安全的(支持同步访问)。StringBuilder 相较于 StringBuffer 有速度优势。 Δ Java重写(Override)和重载(Overload)的区别? 重写 是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 重载 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同

基础篇—List、Set、Map

可紊 提交于 2019-12-22 15:15:58
List是存储对象的容器,可以存储任意类型的对象且长度可变,List的存储对象是有顺序的,可重复的。 <1> List的接口框架 ArrayList实现类通过数组实现,在向集合中增加或删除时,需要对集合进行增容和拷贝,所以增删慢;而数组可以直接通过索引进行查找,所以查询快;一般查询多增删少的,优先选择ArrayList集合。 LinkedList实现类通过链表实现,在向集合中增加或删除时,无需扩容,所以增删快;但是不能通过索引进行定位查找,需要检索全部,所以查慢;一般增删多查询少的,优先选择LinkedList集合。 Vector实现类也是通过数组实现,是线程安全的,所以一般效率较ArrayList低。 <2> List接口的方法 增加 add(Object object); 将指定对象存储到List容器中。addAll(List list); 将指定集合中的元素存储到List容器中。 删除 remove(Object object); 将指定对象从容器中移除。removeAll(List list); 移除容器中与指定集合中的元素相同的元素。clear(); 清空容器中的所有元素。 修改 set(Integer index,Object object); 将容器中指定位置的元素修改成指定元素。 判断 isEmpty(); 判断容器是否为空。contains(Object

C++ STL基本容器的使用

僤鯓⒐⒋嵵緔 提交于 2019-12-21 21:05:52
  C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与vector类似,但是对首元素提供插入和删除的双向支持。关联容器主要有map和set.map是key-value形式,set是单值。map和set只能存放唯一的key,multimap和multiset可以存放多个相同的key.   容器类自动申请和释放内存,因此无需new和delete操作。   一、vector   vector基于模板实现,需包含头文件vector.   1.定义和初始化   //1.定义和初始化   vector vec1; //默认初始化,vec1为空   vector vec2(vec1); //使用vec1初始化vec2   vector vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2   vector vec4(10); //10个值为的元素   vector vec5(10,4); //10个值为的元素   //2.常用操作方法   vec1.push_back(100); //添加元素   int size = vec1.size(); //元素个数   bool isEmpty = vec1

STL 总结

爱⌒轻易说出口 提交于 2019-12-20 11:52:46
发现stl还是很好用的。。。。学过以后,po一发博客便于以后复习和加深记忆和理解 首先对迭代器加以说明 C++ primer (中文版第四版)第273页 9.3.2 begin和end成员 begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器,如下所示。这两个迭代器通常用于标记包含容器中所有元素的迭代范围。       c.begin() 返回一个迭代器,它指向容器c的第一个元素       c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一个位置       c.rbegin() 返回一个反向迭代器,它指向容器c的最后一个元素       c.rend() 返回一个反向迭代器,它指向容器c的第一个元素前面的位置 上述每个操作都有两个不同的版本:一个是const成员,另一个是非const成员。这些操作返回什么类型取决于容器是否为const。如果容器不是const,则这些操作返回iterator或reverse_iterator类型。如果容器是const,则其返回类型要加上const_前缀,也就是const_iterator和const_reverse_iterator类型。          其次,说明一下,定义在algorithm中的固有stl函数,find 和 count; <1>find 函数,返回值类型为找到元素的迭代器

C++ STL基本容器使用

怎甘沉沦 提交于 2019-12-17 12:31:29
---恢复内容开始--- C++ STL基本容器使用 1:关联容器和顺序容器    c++中有两种类型的容器:顺序容器和关联容器,顺序容器主要有:vector、list、deque等。其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实现。deque与vector类似,但是对于首元素提供删除和插入的双向支持。关联容器主要有map和set。map是key-value形式的,set是单值。map和set只能存放唯一的key值,multimap和multiset可以存放多个相同的key值。 容器类自动申请和释放内存,我们无需new和delete操作。 2:顺序容器的介绍 1):vector,需要包含头文件#include<vector> 主要的操作有 //1.定义和初始化 vector<int> vec1; //默认初始化,vec1为空 vector<int> vec2(vec1); //使用vec1初始化vec2 vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2 vector<int> vec4(10); //10个值为0的元素 vector<int> vec5(10,4); //10个值为4的元素 //2.常用操作方法 vec1.push_back(100); //尾部添加元素

list、set、map以及array的区别

强颜欢笑 提交于 2019-12-17 08:07:20
对于刚刚学习集合框架来说,如何选择list、set、map以及array是比较模糊的 在此我将对这四种情况做总结: array : 数组,可以存储对象和基本数据类型,长度固定 。 Collection:集合(单列),用于存储对象、不能存储基本数据类型(int,char等),但可以存储基本数据类型包装类(int-Integer,char-Character等),长度可变 那么,为什么会出现这么多集合呢,我们可以把集合比如成容器。每个不同容器中对数据的存储方式不同,这种存储方式称为数据结构 List :元素有序,可重复。 ArrayList:数组。特点:有索引(脚标),所以查找快,增删后每个元素的索引都发生改变,所以增删慢,而且数组越长增删越慢 LinkedList:链表。特点:无索引,每个元素都包含下一元素地址,查找需要逐一进行,所以查找慢,但是增删快只需要改变元素后面的地址。 Vector:线程同步数组 基本抛弃使用。 Set :元素无序,不重复,无索引。 HashSet:哈希表。特点:线程非同步,保证元素唯一性原理:判断hashCode是个屁相同,洗过相同在判断equals方法是否为true。 TreeSet:二叉树。特点:可对用两种方法对集合中元素排序,1.实现comparable接口,覆盖compareTo方法。2.集合建立时规定,并自定义比较类。 Map :双列集合