set容器

STL set 用法

柔情痞子 提交于 2019-11-27 18:55:52
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原... c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。 1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素 2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数 3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同) set模板原型://Key为元素(键值)类型 1 template < class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) > 从原型可以看出,可以看出比较函数对象及内存分配器采用的是默认参数,因此如果未指定,它们将采用系统默认方式。 set的各成员函数列表如下: c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器 c++ stl容器set成员函数

STL中的set使用方法详细!!!!

老子叫甜甜 提交于 2019-11-27 18:55:37
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。 关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。 关于set有下面几个问题: (1)为何map和set的插入删除效率比用其他序列容器高? 大部分人说,很简单,因为对于关联容器来说,不需要做内存拷贝和内存移动。说对了,确实如此。set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多

C++ STL set容器常用用法

二次信任 提交于 2019-11-27 18:55:06
set是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset。 1.set容器的常用操作 使用时注意包含头文件<set> std::set and std::multiset associative containers s.begin()  返回set容器的第一个元素 s.end()      返回set容器的最后一个元素 s.clear() 删除set容器中的所有的元素 s.empty()     判断set容器是否为空 s.insert() 插入一个元素 s.erase() 删除一个元素 s.size()     返回当前set容器中的元素个数 set模板原型://Key为元素(键值)类型 template < class Key , class Compare =less< Key >, class Alloc=STL_DEFAULT

【数据结构与算法】(二)链表

 ̄綄美尐妖づ 提交于 2019-11-27 18:41:17
环形链表 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { set<ListNode *> address; ListNode* pos=head; while(true){ if(pos==NULL){ return false; } if(address.count(pos)==1){ return true; }else { address.insert(pos); } pos=pos->next; } return true; } };    要点: c++ STL 函数 Set 关联容器支持高效的关键字查找和访问 set.insert(1); set.count(1) count() 用来查找set中某个某个键值出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。 set底层实现方式为RB树(即红黑树) 来源: https://www.cnblogs.com

Java 集合框架

走远了吗. 提交于 2019-11-27 15:04:49
早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。 虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。 集合框架被设计成要满足以下几个目标。 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。 对一个集合的扩展和适应必须是简单的。 为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList , HashSet , 和 TreeSet 等,除此之外你也可以通过这些接口实现自己的集合。 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。

set的常见用法

不问归期 提交于 2019-11-27 15:04:01
set的使用 set是什么 set是一个内部有序且不含重复元素的容器 用处 *使得元素自动有序 *去除重复元素 set的引入 # include <set> using namespace std; set的定义 set<typename> name; //typename可以是任何类型,比如int、float、或者结构体、对象 定义的实际例子 set<int> name; set<float> name; set<double> name; set<node> name;//node是一个结构体 set<typename> array[max_size];//定义一个set类型的数组 set的使用 set内部的元素的访问 set只能通过迭代器来进行访问 //定义迭代器的时候要填写实际的类型 set<typename>::iterator it; set<int>::iterator it; set<char>::iterator it; 除了vector和string外的stl容器都不支持*(it+i)的访问方式 元素的插入 # include <iostream> # include <set> using namespace std; int main(void) { set<int> st; st.insert(3); st.insert(2); st.insert(7);

Java 集合

白昼怎懂夜的黑 提交于 2019-11-27 12:50:29
目录 Java 集合 1. Collection集合(单列集合) 集合概述 集合的架构 Collection常用的方法 Iterator 2. 增强for(for each) 3. 泛型(Generic) 泛型概念 使用泛型的好处 定义含有泛型的类 定义含有泛型的方法 定义含有泛型的接口 泛型的通配符 通配符的高级使用—泛型受限 4. 综合案例:斗地主(单列集合) 5. List集合 List接口的特点: List接口中带索引的方法(特有): 6. List的实现类 1. ArrayList集合 2. LinkList集合 3. Vector集合 7. Set集合 哈希值 HashSet存储数据的结构(哈希表) Set集合存储不重复元素的原理 HashSet存储自定义类型的元素 LinkedHashSet集合 可变参数 8. Collections工具类 9. Map集合(双列集合) 概述 Map常用子类 Map接口中的常用方法 HashMap存储自定义类型键值 LinkedHashMap集合 Hashtable集合 练习 JDK9对集合添加的优化 10. 综合案例:斗地主(双列集合) Java 集合 1. Collection集合(单列集合) 集合概述 集合:集合是Java提供的一种容器,可以用来存储多个数据。 数组的长度是固定的,而集合的长度是可变的。

Set容器

岁酱吖の 提交于 2019-11-27 12:37:08
set集合容器: 实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时, 它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值, 而小于右子树所有节点的键值;另外,还得确保根节点的左子树的高度与有字数的高度相等, 这样,二叉树的高度最小,从而检索速度最快。要注意的是,它不会重复插入相同键值的元素,而采取忽略处理。 平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector、deque、和list的容器。 另外,采用中序遍历算法可将键值由小到大遍历出来,所以,可以理解为平衡二叉检索树在插入元素时, 就会自动将元素按键值从小到大的顺序排列。 构造set集合的主要目的是为了快速检索,使用set前,需要在程序头文件中包含声明“#include<set>”。 c++ stl集合(Set): 是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则, 自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。 1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素 2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数 3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)

集合的笼统介绍之set(无序)

最后都变了- 提交于 2019-11-27 12:04:46
collection下的另一个集合接口set 它的hashset集合特点:①无序②无下标③不可存储重复 如何判断存储元素是重复HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法。 set最重要的一点就是哈希表,也就是hashset的存储数据结构(哈希表) 除此之外,它的创建对象,常用方法,遍历和collection几乎一致,一个案例表明一下。但我们需要注意,它是没有下标的, 所以做不到list集合那样怎么存怎么取,唯一能够判断的也就是哈希值了。 public static void main(String[] args) { //创建hashset对象。string类型的继承set接口的hashset集合,进行存储 Set<String> set=new HashSet<String>(); //给hastset添加自定义对象 set.add("abc"); set.add("bcd"); set.add("abc"); //遍历 for(String s:set){ System.out.println(s); } } 这里应证了,set集合不能存储重复元素,顺序随心情而定。 它默认的长度是16,哈希值是0.75,也就是说,当一次new16个长度集合,我们在存储到12时就需要再创建一个新的。