set容器

集合框架

柔情痞子 提交于 2020-01-30 08:51:23
参考网址:http://blog.csdn.net/speedme/article/details/22398395 一.集合 1.集合与数组的区别 总述:几乎有有的集合都是基于数组来实现的, 因为集合是对数组做的封装,所以,数组永远比任何一个集合要快,但任何一个集合,比数组提供的功能要多 (1)数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。 (2)一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。 (3)数组是一种可读/可写数据结构---没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方法,以只读方式来使用集合。该方法将返回一个集合的只读版本。 集合的特点: a.空间可增长 b.可以存储不同类型的数据 数组的特点: a.空间固定 b.只能存储某种类型的数据 集合的分类: a.collection:List(ArrayList,LinkedList)和Set(HashSet,TreeSet,LinkedHashSet) b.Map(映射):HashMap,TreeMap和LinkedHashMap Collection与Map的区别: 容器内每个为之所存储的元素个数不同。 Collection类型者,每个位置只有一个元素。 Map类型者,持有 key-value pair,像个小型数据库。 注意:

set - C++ Reference

偶尔善良 提交于 2020-01-30 08:01:17
Set set(集合)是按照 特定顺序 存储 唯一元素 的容器。 在一个set中,元素的值也可以标识它(该值本身是T类型的key),并且每个值都必须是唯一的。 set中元素的值不能一次在容器中修改(元素始终为const),但可以将其插入容器或从容器中删除。 在内部,集合中的元素总是按照其内部 比较对象 (类型为Compare)指示的特定 严格弱排序标准 进行排序。 set容器通常比unordered_set容器(c++11)通过key访问单个元素要慢,但是它们允许基于子集的顺序直接对子集进行迭代。 集通常实现为二进制搜索树。 Container properties 容器属性 Associative 联合的 关联容器中的元素由其键引用,而不是由其在容器中的绝对位置引用。 Ordered 顺序 有序的容器中的元素始终严格遵守顺序。 所有插入的元素均按此顺序分配位置。 Set 集合 元素的值也是用于标识它的键。 Unique keys 唯一键 容器中没有两个元素可以具有等效键。 Allocator-aware 分配器感知 容器使用分配器对象动态处理其存储需求。 Template parameters 模板参数 T 元素的类型。 设置容器中的每个元素也由该值唯一标识(每个值本身也是元素的键)。 别名为成员类型 set::key_type 和 set::value_type 。

Day7——DI依赖注入构造器方法

孤街醉人 提交于 2020-01-28 15:06:33
一. 回顾 前面 Day6——DI依赖注入set方法 讲到了IOC容器通过set方法给bean对象赋值。今天来讲通过构造器给bean对象赋值。 二. 原理 Person.java public Person ( String name , double salary ) { System . out . println ( "调用了形参为String,double类型的构造器" ) ; this . name = name ; this . salary = salary ; } public Person ( String name , int salary ) { System . out . println ( "调用了形参为String,int类型的构造器" ) ; this . name = name ; this . salary = salary ; } applicationContext.xml < bean id = " person2 " class = " com.atguigu.spring.bean.Person " > < constructor-arg value = " 老王 " index = ”0“ > </ constructor-arg > < constructor-arg value = " 10000 " type = " int "

存在重复元素

孤街醉人 提交于 2020-01-26 22:39:20
题目: 给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。 class Solution { public : bool containsDuplicate ( vector < int > & nums ) { set gather ( nums . begin ( ) , nums . end ( ) ) ; return gather . size ( ) != nums . size ( ) ; } } ; 题解:通过set集合的互异性,无重复元素存在来判断容器vector中是否存在重复元素。 来源: CSDN 作者: Hots3y 链接: https://blog.csdn.net/Hots3y/article/details/104089409

007Java集合框架+Collection接口API+Iterator迭代器接口+Set接口+List接口+Map接口+Collections工具类

允我心安 提交于 2020-01-25 08:04:47
一.Java集合框架 Java集合概述(java.util包下) 一方面,面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另 一方面,使用Array存储对象方面具有一些弊端,而Java集合就像一种容器,可以动态地把多个对象的引用放入容器中。 Java集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。 数组存储对象的特点:Student[] stu = new Student[20];stu[0] = new Student();弊端,一旦创建,其长度不可变。真实的数组存放的对象的个数是不可知的。 Java集合可分为Collection和Map两种体系 Collection接口:Set,元素无序、不可重复的集合,HashSet、LinkedHashSet、TreeSet。List,元素有序,可重复的集合,ArrayList、LinkedList、Vector。 Map接口:具有影射关系“key-value对”的集合。HashMap、LinkedHashMap、TreeMap、Hashtable(子类-Properties)。 二.Collection接口API Collection接口方法 1.size():返回集合中元素的个数 2.add(Object obj):向集合中添加一个元素 3.addAll

【c++】STL之set用法总结

こ雲淡風輕ζ 提交于 2020-01-24 02:11:26
介绍 set和multiset会根据特定准则将元素自动排序(从小到大)。两者的不同之处在于multiset允许元素重复而set不允许。 所以不能直接改变元素值,因为这样会打乱原本正确的顺序。因此要改变元素值必须先删除旧元素,再插入新元素。 C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。 用法 1 头文件 # include <set> 2 非更易型操作,用来查询大小互相比较 c.key_comp() c.value_comp() c.empty()——返回容器是否为空 c.size()——返回目前元素的个数 c.max_size()——返回元素个数之最大可能量 c1==c2 c1!=c2 … 3 查找 c.count(val)——返回元素值为val的元素个数,有些就没有count函数,比如vector之类的容器没有count c.find(val)——返回元素值为val的第一个元素,如果找不到就返回end() 4.迭代器 begin(); // 返回指向第一个元素的迭代器 end(); // 返回指向最后一个元素的迭代器 rbegin()

Java从0开始(12)(集合)

心不动则不痛 提交于 2020-01-22 22:55:19
集合 Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。 Java 集合可分为 Collection 和 Map 两种体系 Collection接口 Collection 接口是 List、 Set 和 Queue 接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合。 Collection接口: 单列数据, 定义了存取一组对象的方法的集合 List: 元素有序、可重复的集合 Set: 元素无序、不可重复的集合 Collection 接口方法 添加 add(Object obj) addAll(Collection coll) 获取有效元素的个数 int size() 清空集合 void clear() 是否是空集合 boolean isEmpty() 是否包含某个元素 boolean contains(Object obj): 是通过元素的equals方法来判断是否是同一个对象 boolean containsAll(Collection c): 也是调用元素的equals方法来比较的。 拿两个集合的元素挨个比较。 删除 boolean remove(Object obj) : 通过元素的equals方法判断是否是要删除的那个元素。 只会删除找到的第一个元素 boolean removeAll

ES6 --- Set和Map

你离开我真会死。 提交于 2020-01-22 08:41:18
一、Set,ES6中提供了Set数据容器,这是一个能够存储无重复值的有序列表;Set本身是一个构造函数 const setNumber = new Set ( ) ; 1、正常添加元素 add(value) const setNumber = new Set ( ) ; setNumber . add ( 1 ) setNumber . add ( 2 ) setNumber . add ( 7 ) setNumber . add ( 1111 ) setNumber . add ( 66 ) console . log ( setNumber ) 当然,也可以这么写 const setNumber = new Set ( ) ; setNumber . add ( 1 ) . add ( 2 ) . add ( 7 ) . add ( 1111 ) . add ( 66 ) 不过,不能这么写,这么写,最后只会有一个1 const setNumber = new Set ( ) ; setNumber . add ( 1 , 2 , 7 , 1111 , 66 ) 2、如果想要尝试添加重复元素 const setNumber = new Set ( ) ; setNumber . add ( 1 ) setNumber . add ( 2 ) setNumber . add ( 1

C程序-PAT-1087 有多少不同的值

人走茶凉 提交于 2020-01-22 06:58:52
当自然数 n 依次取 1、2、3、……、N 时,算式 ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少个不同的值?(注:⌊x⌋ 为取整函数,表示不超过 x的最大自然数,即 x 的整数部分。) 输入格式: 输入给出一个正整数 N(2≤N≤10​4​​)。 输出格式: 在一行中输出题面中算式取到的不同值的个数。 输入样例: 2017 输出样例: 1480 思路分析:就是 计算1、2、3、……、N时⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少种结果 可以使用set容器,1、set中的元素都是排好序的,2、set集合中没有重复的元素 #include <iostream> #include <stdio.h> #include <set> using namespace std; int main( ) { int n; set<int> arr; scanf("%d",&n); for(int i = 1; i <= n; i++) { arr.insert(i/2 + i/3 + i/5); } printf("%d",arr.size()); return 0; } 来源: CSDN 作者: 繁星璀璨G 链接: https://blog.csdn.net/qq_40788199/article/details/103753231

PAT1063 Set Similarity

我的未来我决定 提交于 2020-01-22 01:16:20
原文链接:欢迎访问我的个人博客 考点 stl中set的运用 思路 题目要求计算任意两个集合中,相同的元素占所有元素的比例,但是同一个集合中的相同元素则是不考虑的。基于这一点,我们应该能够想到,在数据输入的时候就用set容器来进行接收。在判断的过程中,只需要遍历其中一个set容器,这里需要借助set中的find函数。 代码 #include <bits/stdc++.h> using namespace std; int N,M,K; set<long> s[10010]; int main(){ scanf("%d",&N); for(int i=1;i<=N;i++){ scanf("%d",&M); for(int j=0;j<M;j++){ int tmp; scanf("%d",&tmp); s[i].insert(tmp); } } scanf("%d",&K); for(int i=0;i<K;i++){ int a,b; scanf("%d%d",&a,&b); int nc = 0, nt = s[b].size(); set<long>::iterator it = s[a].begin(); for(; it != s[a].end(); it++) { if(s[b].find(*it) == s[b].end()) nt++; else nc++; }