STL集合的用法

首先直接贴出来例程:

 1 #include<iostream>
 2 #include<set>
 3 using namespace std;
 4 struct Info  //如果集合中的元素是自定义类型,一定要重载<运算符
 5 {
 6     string name;
 7     double score;
 8     bool operator<(const Info &a) const
 9     {
10         return a.score<score;
11     }
12 };
13 set<int> s;
14 int main()
15 {
16     s.insert(1);
17     s.insert(2);
18     s.insert(3);
19     s.insert(1);  //重复元素是不计算在内的
20     cout<<s.size()<<endl;  //当前集合中元素个数
21     cout<<s.max_size()<<endl;  //当前集合最多放多少元素
22     cout<<*s.begin()<<endl;  //当前集合的第一个元素
23     cout<<*s.end()<<endl;  //当前集合的最后一个原生物
24     cout<<s.count(2)<<endl;  //判断某一个元素是否在集合出现过
25     set<int>::iterator tmp=s.find(3);   //返回当前元素的迭代器位置,如果没找到返回s.end()
26     cout<<*tmp<<endl;
27     for(set<int>::iterator it = s.begin();it!=s.end();++it)
28     {
29         cout<<*it<<endl;
30     }
31     return 0;
32 }

然后我们注意几个地方就好了

第一个地方是对于结构体的处理,要记住<运算符重载函数,因为set中的元素是默认有序的

第二个需要注意的地方是find返回的是迭代器,一定不能直接cout或者直接用

然后补充几个特殊的成员函数:

     pair<set<int>::const_iterator,set<int>::const_iterator> pr;
     pr = s.equal_range(3);
     cout<<"第一个大于等于 3 的数是:"<<*pr.first<<endl;
     cout<<"第一个大于 3的数是:"<<*pr.second<<endl;

返回的是pair,而且pair里放的也是迭代器

 //删除迭代器位置的元素
     s.erase(s.begin());
 //删除迭代器区间的元素
     first = s.begin();
     second = s.begin();
     second++;
     second++;
     s.erase(first,second);
 //给定值,删除元素(好像只有这个有用)
     s.erase(8);

其实上一个函数equal_range函数完全是为了规避遍历的

这里还有一个类似的函数

     cout<<*s.lower_bound(3)<<endl;
     cout<<*s.upper_bound(3)<<endl;
//返回第一个大于等于key的迭代器指针
//返回第一个大于key的迭代器指针

其实就是把pair拆开了。

集合的用法就介绍到这里,目前我们在枚举集合元素,进行的交并补等运算时,都是采用二进制形式来处理的,具体可参考本博客的另一篇博文

原文地址:https://www.cnblogs.com/aininot260/p/9324336.html

时间: 2024-10-10 05:08:19

STL集合的用法的相关文章

STL的其他用法总结

2017-08-20 17:26:07 writer:pprp 1.adjacent_find() 下面是源码实现: template <class ForwardIterator> ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last) { if (first != last) { ForwardIterator next=first; ++next; while (next != last) {

字典、集合的用法

// NSDictionary NSDictionary *dictionary = [[ NSDictionaryalloc]initWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2",  @"v3", @"k3", @"vc9", @"ko0",@"M",@&q

C++中的STL中map用法详解

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面举例说明什么是一对一的数据映射.比如一个班级中,每个学生的学号跟他的姓名就存在着一一

STL set 详细用法

一个集合(set)是一个容器,它其中所包含的元素的值是唯一的. 用到的库 #include <set> 定义 最简单: set<int> a; set和其他的stl一样,都支持自定义. 因为set会自动将元素从小到大排序,所以我们可以设定它的比较函数,这里与优先队列十分相似. 法1 利用自定义比较函数: #include<stdio.h> #include<set> #include<string> using namespace std; st

各种STL的基本用法

目录 STL及一些常用函数的基本用法 1.vector(向量)的基本用法 2.queue(队列)的基本用法 3.stack(栈)的基本操作 4.set(集合)的基本用法 5.map(映射)的基本用法 6.unorded_map的用法 7.list(列表)的基本用法 7.next_premutation(全排列)的用法 8.stringstream的用法 9.unique的用法 10.lower_bound的用法 11.string中的substr的用法 STL及一些常用函数的基本用法 1.vec

JAVA常用集合框架用法详解基础篇一之Colletion接口

首先,在学习集合之前我们能够使用的可以存储多个元素的容器就是数组. 下面举几个例子主要是引出集合类的: 1.8,4,5,6,7,55,7,8  像这样的类型相同的可以使用数组来存储,本例可以用int[] arr来存储. 2."zhnagsan",true,68 像这样的可以使用StringBuilder或者StringBuffer来存储,但最终需要使用.toString()的方法转换成字符串才可以使用.即 变为:"zhnagsantrue68". 3."李

STL set简单用法

set的常见用法详解 set翻译为集合,是一个内部自动有序并且不含重复元素的容器. 可以用于去掉重复元素,或者元素过大,或者不能散列的情况,set只保留元素本身而不考虑它的个数. 头文件:#include<set> set的定义 单独定义一个set: set<typename> name; //与其他容器一样,要注意不要出现>>两个大于号相连 set容器内元素的访问 set只能通过迭代器访问. set<typename>::iterator it; set的

python中集合的用法

一.创建集合 1.特点 存放不同的元素 无序 不可变类型(数字.字符串.元组) 2.创建集合 s=set('hello') print(s) s=set(['alex','alex','sb']) print(s) s={1,2,3,4,5,6} 3.集合的基本用法 (1)添加 s.add('s') (2)清除 s.clear() (3)复制 s.copy() (4)删除 remove()指定删除某一个元素 若删除元素不存在则报错 discard('sbbbb') 删除元素不存在不会报错 (5)

STL容器set用法以及codeforces 685B

以前没怎么用过set,然后挂训练赛的时候发现set的妙用,结合网上用法一边学一边写. 首先set是一种容器,可以跟其他STL容器一样用 set<int > s 来定义, 它包含在STL头文件#include<set>中. 其内部是用红黑树来实现的, 一个是保证set里面是有序的, 默认的排序是从小到大排序, 而且set容器的元素都是唯一的, 如果里面的元素允许重复那就用 multiset 容器来实现. 1. set的常用操作 s.begin() 返回set容器的第一个元素的位置(第