set容器

STL标准模板库之set

不想你离开。 提交于 2019-11-27 09:52:20
目录 一、关联式容器 二、什么是set? 特点 优缺点和适用场景: 三、定义及初始化 四、基本操作 1)容量函数 2)修改函数 3)迭代器 4)其他函数 五、与序列容器的不同点 一、关联式容器 关联式容器依据特定的排序准则,自动为其元素排序。排序准则以函数形式呈现,用来比较元素值(value)或元素键(key)。缺省情况下以 operator< 进行 比较,不过你也可以提供自己的比较函数,定义出不同的排序准则。 通常关联式容器由二叉树(binary tree)实现。在二叉树中,每个元素(节 点)都有一个父节点和两个子节点;左子树的所有元素都比自己小,右子树的所有元素都比自己大。关联式容器的差别主要在于元素的类型以及处理重复元素时的方式。 STL预先定义好的关联式容器有:集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)。 二、什么是set? 集合(set)简而言之是一种包含已排序对象的关联容器,不允许有重复元素。 一个集合通过一个链表来组织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢。具体实现采用了红黑树的平衡二叉树的数据结构。 特点 set中的元素都是排好序的。 set中没有重复的元素。 map和set的插入删除效率比用其他序列容器高,因为对于关联容器来说,不需要做内存拷贝和内存移动。 优缺点和适用场景

Java集合类总结

☆樱花仙子☆ 提交于 2019-11-26 22:51:12
前言 之前一直做C++开发,在使用标准集合类的类库时都是使用的STL,觉的这个就是比C语言非常大的进步,很好用;后来玩Java,发现Java中的集合类更是好用,但是由于Java语言的发展原因,在使用的过程中也有很多坑,有很多的细节需要去处理。最近在进行组内代码评审时,就发现开发人员乱用集合类的情况。很多开发人员就不明白各个集合类的特性和使用场景,反正列表就用 ArrayList ,键值就用 HashMap ,仿佛在他们眼中Java的集合类就只有 ArrayList 和 HashMap 这两种。不怕大家笑话,曾经我也是这么使用的,今天就用一点时间,好好的对Java集合类的使用进行一次扫盲。 Java集合概述 Java提供的众多集合类由两大接口衍生而来: Collection 接口和 Map 接口。为了更好的把握Java集合类的整体结构,我这里先贴一个Java集合的整体类图,以便大家对Java集合类有一个整体的印象。 乍一看这个图很复杂,其实我们仔细梳理一下,这个图还是非常清晰的。可以这么看,在Java的集合类中,主要分为 List 、 Map 、 Set 和 Queue 这四大类,这四大接口类下面,又根据使用场景分为多个具体的子类。下面就一一进行总结。 Collection接口说明 从类图上可以看到, Collection 接口作为一个非常重要的基础接口,所以我们有必要对

迭代器(Iterator)遍历List、Set、Map

℡╲_俬逩灬. 提交于 2019-11-26 21:39:51
大晚上的睡不着觉,还是起来写博客吧。迭代器我主要是用来遍历List、Set、Map的,然而好久没用过,又突然忘记了,所以有写了一遍(妈的,我还就不信了,我写10遍看能不能忘记)。 迭代器也就是将集合的数据放到一个容器中并排成一排,iterator有一个游标,最初的时候,游标在第一个元素前面,调用Iterator.next()是将游标往后移一位,Iterator.hasNext()是判断游标后面还没有可以迭代的元素。 为什么用迭代器了,在《java编辑思想》这本书里说,是因为最初的时候你用for循环遍历List,之后人家又要你遍历Set,但是for循环无法遍历Set,因为Set是无序的,所以后面就统一用迭代器遍历集合了。 遍历List 1 List<String> list = new ArrayList<String>(); 2 list.add("a"); 3 list.add("b"); 4 Iterator<String> iterator = list.iterator(); 5 while(iterator.hasNext()){ 6 String next = iterator.next(); 7 System.out.println(next); 8 } 遍历Set,和List一样 1 Set<String> set = new HashSet<String>();

Python_set集合&dict字典

时光总嘲笑我的痴心妄想 提交于 2019-11-26 20:09:37
-------------------集合set------------------ 概念 set是可变的、无序的、不重复的元素集合(约定:set为集合,collection为集合类型或容器) set操作 set初始化 >>> s1 = set() >>> s2 = {} >>> s3 = {1, 2, 3} # {}内元素非k-v格式并且不为空时,类型为set >>> type(s2), type(s3) (dict, set) set元素 必须可hash:可hash的都为不可变类型,称为hash类型, hashable(不可hash的类型:list、set、bytearray) 数值型:int、float、complex 布尔型:True、False 字符串: string、bytes tuple None 不可以是索引 可迭代 # hash语法:hash(object) # object ->对象 # 返回对象的哈希值 # 示例: >>> hash(11), hash(11.11) # 数值 (11, 253642731013505035) >>> hash(True), hash(False) # 布尔 (1, 0) >>> hash('summer'), hash(b'a') # 字符串 (1892576216179648960, -6180982495755337473

HDU2094 产生冠军

大城市里の小女人 提交于 2019-11-26 17:59:05
产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 26594 Accepted Submission(s): 11947 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。 球赛的规则如下: 如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。 如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。 根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。 Input 输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。 Output 对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。 Sample Input 3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0 Sample Output Yes No

python基础-Task3

浪尽此生 提交于 2019-11-26 16:03:38
1.dict字典 1.1定义 是一种可变容器模型,且可存储任意类型对象。 1.2创建 传统方法: d={'name':'Allen','age':21,'gender':'male'} 动态分配键值: d={} d['name']='Allen' d['age']=21 d['gender']='male' PS:访问不存在的键会报错 字典键值表: c = dict(name='Allen', age=14, gender='male') PS:键必须都是字符串才行 字典键值元组表: e=dict([('name','Allen'),('age',21),('gender','male')]) 所有键的值都相同或者赋予初始值: f=dict.fromkeys(['height','weight'],'normal') 1.3字典的方法 1 dict.clear() 删除字典内所有元素 2 dict.copy() 返回一个字典的浅复制 3 dict.fromkeys(seq[, val]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值 4 dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值 5 dict.has_key(key) 如果键在字典dict里返回true,否则返回false 6

集合

笑着哭i 提交于 2019-11-25 23:49:47
Java 集合 Collection 集合 1.1 集合概述 集合:集合是 java 中提供的一种容器,可以用来存储多个数据。 1.2 集合框架 JAVASE 提供了满足各种需求的 API,在使用这些 API 前,先了解其继承与接口操作架构,才 能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用。 集合按照其存储结构可以分为两大类,分别是单列集合 java.util.Collection 和双列集合 java.util.Map Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的 子接口,分别是 java.util.List 和 java.util.Set。其中,List 的特点是元素有序、元素 可 重 复 。 Set 的 特 点 是 元 素 无 序 , 而 且 不 可 重 复 。 List 接 口 的 主 要 实 现 类 有 java.util.ArrayList 和 java.util.LinkedList , Set 接 口 的 主 要 实 现 类 有 java.util.HashSet 和 java.util.TreeSet。 1.3 Collection 常用功能 Collection 是所有单列集合的父接口,因此在 Collection 中定义了单列集合(List 和 Set) 通用的一些方法

#C++初学记录(set进阶#acm cf 190802 B. Subsegments)

*爱你&永不变心* 提交于 2019-11-25 21:21:39
B. Subsegments#set进阶 Programmer Sasha has recently begun to study data structures. His coach Stas told him to solve the problem of finding a minimum on the segment of the array in , which Sasha coped with. For Sasha not to think that he had learned all, Stas gave him a new task. For each segment of the fixed length Sasha must find the maximum element of those that occur on the given segment exactly once. Help Sasha solve this problem. Input The first line contains two positive integers n and k (1 ≤ n ≤ 105, 1 ≤ k ≤ n) — the number of array elements and the length of the segment. Then follow n