set容器

349. 两个数组的交集

旧街凉风 提交于 2020-01-21 21:30:16
给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [9,4] 说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 注意一: 对于交集中的重复的元素,返回唯一的元素,有两种方法进行处理:第一种,直接用set存放结果,后转化成相应的返回类型,第二种,可以用直接用返回类型来存放,但是查找完之后需要把元素删除掉 注意二: 迭代器的 end()函数 并不指向容器的最后一个元素,是指 向容器的最后元素的下一位置 class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { //查找,用set可以降低时间复杂度, //返回结果也是唯一,而不是交集所有元素,故用set set<int> record; for(int i=0;i<nums1.size();i++) record.insert(nums1[i]); //返回结果也是唯一,而不是交集所有元素,故用set set<int> map_record; for(int i=0;i<nums2.size(

java基础---集合篇

那年仲夏 提交于 2020-01-18 05:05:39
List集合 该添加方法是在集合的指定位置添加元素,指定位置原有元素的位置向后挪了一位(即下标加1): List.add(集合下标,添加元素);(集合实现类: ArrayList () ) 该添加方法是将另外一个集合(参数)的元素添加到集合的结尾处: List.addAll(Collection c ); List集合的底层实现: List集合的子类包括:ArrayList 底层使用的是:数组 注意:实现数组长度可变,指的是重新创建一个新的数组,长度大于旧数组 LinkedList 底层使用:链表结构 特点:每一个元素,前半部分是具体的值,后半部分是地址值 List集合的特点: 元素可重复,不唯一,有序(添加顺序/索引顺序/先后顺序) 集合只能存储对象或引用数据类型,基本数据类型不允许存放在集合当中。 当集合添加基本数据类型的时候,会自动装箱(将基本数据类型转换成引用数据类型)。 引用数据类型可以使用“==”和equals()方法比较,使用equals()方法比较集合元素是否重复。 List集合输出的三种方式: 标准for循环,增强for循环 以及迭代器(重点):(集合中的标准输出方法) System. out .println( "============== 迭代器输出 ===================" ); // 获取迭代器 ----List 集合当中存在一个方法 -

STL中的map、set(学完红黑树后的一个小总结)

亡梦爱人 提交于 2020-01-18 03:59:05
树介绍 树是一种很常用的数据结构,在很多地方都能看到树的应用,因为树往往可以用来优化数据查找的效率。 在一些优秀的系统中就会经常用到各种树结构,比如红黑树、AVL树、B树等。 红黑树的应用: 原理: 根节点是黑色的 只有红黑节点 叶节点都是黑色的nil 红色节点子节点必须是黑色的 对每个节点,从该节点到叶子节点路径上的黑节点数目一致,黑平衡性质 以上的五个性质保证了红黑树是平衡的,所以红黑树的查找效率能够稳定在lgn STL模板库中map和set的底层实现: 红黑树中节点和迭代器的实现 所有这些优秀的底层设计都会把结构和数据分离 struct __rb_tree_node_base { typedef __rb_tree_color_type color_type; typedef __rb_tree_node_base* base_ptr; color_type color; // 红黑树的颜色 base_ptr parent; // 父节点 base_ptr left; // 左子节点 base_ptr right; // 右子节点 } template <class Value> struct __rb_tree_node : public __rb_tree_node_base { typedef __rb_tree_node<Value>* link_type;

set数据结构

谁说我不能喝 提交于 2020-01-17 23:26:23
set:无序的不重复的value的集合体 //实例化容器 let s = new Set()//方法一 let s = new Set([1,2,3,4])//方法二,里面存储可循环的数据,不一定是数组,对象,只要是可循环的都可以 //添加数据 //s.add('hello') //s.add('goodbye') s.add('hello').add('good') //删除数据 s.delete('hello') //清空所有 s.clear() //查询是否包含某个值 s.has('hello') //访问集合中元素的长度 s.size //读取所有数据 console.log(s.keys()) console.log(s.values()) console.log(s.entries()) s.forEach(item =>{ console.log(item) }) for(let item of s){ console.log(item) } set容器没有提供修改的方法,只能先删除再添加 来源: https://www.cnblogs.com/qjb2404/p/12207827.html

C++字符串hash

为君一笑 提交于 2020-01-17 04:03:51
#include<set>#include <vector>using namespace std;int main(){ vector<string>a;//a为容器 set<string>b;//自动查重 string c; int n; cin>>n; while(n--){ cin>>c; a.push_back(c);//在a的末尾插入c} b.insert(a.begin(),a.end());//将a插入b cout<<b.size()<<endl;//返回b中元素个数 return 0;} set 函数,它是C++STL中一种标准关联容器 set 中每个元素的值都是唯一的即没有重复元素(用来差余) 且set 中元素自动排序 结构为 set<类型> 标识符 //程序中定义一种string类容器 名为b 3.a.push_back() 就是在vector 最后面加上其他值 4.将a插入b自动查余 来源: CSDN 作者: 脱发''C少男 链接: https://blog.csdn.net/weixin_45907018/article/details/104010857

C++ STL 介绍

自闭症网瘾萝莉.ら 提交于 2020-01-16 05:12:13
STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用。下面,我们就浅谈某些常用的容器。这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点。STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、stac)。 1、顺序性容器 (1)vector   vector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问。由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。vector有多个构造函数,默认的构造函数是构造一个初始长度为0的内存空间,且分配的内存空间是以2的倍数动态增长的,即内存空间增长是按照2 0 ,2 1 ,2 2 ,2 3 .....增长的,在push_back的过程中,若发现分配的内存空间不足,则重新分配一段连续的内存空间,其大小是现在连续空间的2倍,再将原先空间中的元素复制到新的空间中,性能消耗比较大,尤其是当元素是非内部数据时(非内部数据往往构造及拷贝构造函数相当复杂)。 vector的另一个常见的问题就是clear操作。clear函数只是把vector的size清为零,但vector中的元素在内存中并没有消除,所以在使用vector的过程中会发现内存消耗会越来越多,导致内存泄露,现在经常用的方法是swap函数来进行解决:

STL set 使用小结

浪子不回头ぞ 提交于 2020-01-14 13:24:41
这是微软帮助文档中对集合(set)的解释: “描述了一个控制变长元素序列的对象(注:set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分 量)的模板类, 每一个元素包含了一个排序键(sort key)和一个值(value)。对这个序列可以进行查找、插入、删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关 系, 并且当游标指向一个已删除的元素时,删除操作无效。” 而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。这在收集一个数据的具体值的时候是有用的。集 合中的元素按一定的顺序排列,并被作为集合中的实例。如果你需要一个键/值对(pair)来存储数据,map是一个更好的选择。一个集合通过一个链表来组 织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢。 #include<iostream> #include<string> #include<set> using namespace std; int main() { set<string> strset; set<string>::iterator iter; strset.insert("apple"); strset.insert("orange"); strset

STL set 使用小结

对着背影说爱祢 提交于 2020-01-14 02:48:35
这是微软帮助文档中对集合(set)的解释: “描述了一个控制变长元素序列的对象(注:set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分 量)的模板类, 每一个元素包含了一个排序键(sort key)和一个值(value)。对这个序列可以进行查找、插入、删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关 系, 并且当游标指向一个已删除的元素时,删除操作无效。” 而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。这在收集一个数据的具体值的时候是有用的。集 合中的元素按一定的顺序排列,并被作为集合中的实例。如果你需要一个键/值对(pair)来存储数据,map是一个更好的选择。一个集合通过一个链表来组 织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢。 #include<iostream> #include<string> #include<set> using namespace std; int main() { set<string> strset; set<string>::iterator iter; strset.insert("apple"); strset.insert("orange"); strset

IOC 和 DI 简介

对着背影说爱祢 提交于 2020-01-13 07:03:10
传统的方式:传统容器 Ioc容器(把自己也放进去,找) 反转控制:(在a中声明b,ioc知道你要用,就给你主动推送过来了,过来了以后,就要考虑如何去接受他)/////原来的模式是想如何去获取, 接受的方式就是Di(依赖注入),A依赖B 1.通过set方法去接受(调用set方法赋值) 2.构造器的方式接受(在创建对象时利用构造器给他赋值) 来源: CSDN 作者: 试着生存 链接: https://blog.csdn.net/weixin_44050355/article/details/103748659

C++Primer plus-容器-set

天涯浪子 提交于 2020-01-12 09:36:10
set容器基本概念和操作 1.Set的特性是。所有元素都会根据元素的键值自动被排序。 2.set的迭代器不能改变set元素的值,因为set元素值就是其键值,关系到set元素的排序规则。如果任意改变set元素值,会严重破坏set组织。换句话说,set的iterator是一种const_iterator. 3.set插入和删除操作 insert(elem);//在容器中插入元素。 clear();//清除所有元素 erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器。 erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。 erase(elem);//删除容器中值为elem的元素。 void printSet(set<int>&s) { for (set<int>::iterator it=s.begin();it!=s.end();it++) { cout<<*it<<" "; } cout<<endl; } void text01() { set<int>s1; s1.insert(5); s1.insert(6); s1.insert(3); s1.insert(2); s1.insert(9); printSet(s1); if (s1.empty()) { cout<<"空"<<endl; } else {