核心: set 是一个数学含义上的集合-----保证了每个数的确定性, 互异性, 不仅如此, set 中的元素还是有序的.

头文件: #include <set>

拓展:由于 set 内的元素是唯一的, 即不会出现相同值的元素,所以无法存储重复值.如果要想存储重复值那么可以用 multiset.

构造方法:

set<int> s1; //定义一个 int 类型的set, 默认排序是从小到大的.
set<int> s2(s1); //定义一个 int 类型的set, 其初始值从集合 s1 拷贝而来.
int arv[] = {, , , };
set<int> s3(arv, arv + ); //利用迭代器 [ begin(), end() ) 里面的元素构建一个集合

利用仿函数构造:

set< int, greater<int> > s1; //可以改变默认排序规则,按照降序排序

自定义比较函数构造:

const char* s[] = {"", "", "", "", ""};
struct cmp{
bool operator () (const char* a, const char* b) const {
return strcmp(a, b) > ; //按照字典序降序排列
}
};
set<const char*, cmp> s1(s, s + , cmp());

集合的遍历:

set<const char*, cmp>::iterator it;//迭代器类型和集合类型一致
for(it = s1.begin(); it != s1.end(); it++) {
cout << *it << endl;
}

集合的插入:

 s1.insert(value);//插入value,返回pair配对对象,可以根据.second判断是否插入成功,有可能因为重复元素而插入失败  

集合的删除:

s1.erase(value)  //移除 s1 内元素值为value的所有元素,返回移除的元素个数
s1.erase(&pos) //移除pos位置上的元素,无返回值
s1.erase(&first, &last) //移除迭代器[&first, &last)区间内的元素,无返回值
s1.clear() //移除容器 s1 内所有元素

集合的查找:

s1.count(value);   //返回 s1 内元素值为value的元素个数, 为 ”1“ 或者 ”0“
s1.find(value); //返回 s1 内 value 所在位置,找不到 value 将返回end();

自己定义类型必须重载 ”<“

struct NODE{
int x; int y;
bool operator < (const NODE& b) const {
if(x == b.x) return y > b.y; //二级排序为 y 的降序
return x < b.x; //一级排序为 x 的升序
}
};
set<NODE> s1;

其他关于集合的操作:

s1.swap(s2);  //将集合 s1 和集合 s2 互换

//获得两个集合的 并
set<int> s1, s2, s3;
set_union( s1.begin(),
s1.end(),
s2.begin(),
s2.end(),
insert_iterator< set<int> >(s3, s3.begin())
); //获得两个集合的 交
set<int> s1, s2, s3;
set_intersection( s1.begin(),
s1.end(),
s2.begin(),
s2.end(),
insert_iterator< set<int> >(s3, s3.begin())
); //获得两个集合的 差
set<int> s1, s2, s3;
set_difference( s1.begin(), //set_symmetric_difference 为对称差 即 A 交 B - A 并 B
s1.end(),
s2.begin(),
s2.end(),
insert_iterator< set<int> >(s3, s3.begin())
);

STL容器 -- Set的更多相关文章

  1. STL容器

    啦啦啦,今天听啦高年级学长讲的STL容器啦,发现有好多东西还是有必要记载的,毕竟学长是身经百战的,他在参加各种比赛的时候积累的经验可不是一天两天就能学来的,那个可是炒鸡有价值的啊,啊啊啊啊啊 #inc ...

  2. c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...

  3. STL容器删除元素的陷阱

    今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...

  4. 【转】c++中Vector等STL容器的自定义排序

    如果要自己定义STL容器的元素类最好满足STL容器对元素的要求    必须要求:     1.Copy构造函数     2.赋值=操作符     3.能够销毁对象的析构函数    另外:     1. ...

  5. GDB打印STL容器内容

    GDB调试不能打印stl容器内容,下载此文件,将之保存为~/.gdbinit就可以使用打印命令了. 打印list用plist命令,打印vector用pvector,依此类推. (gdb) pvecto ...

  6. STL容器迭代器失效分析

    连续内存序列容器(vector, string, deque) 对于连续内存序列STL容器,例如vector,string,deque,删除当前iterator会使得后面所有的iterator都失效, ...

  7. STL容器的适用情况

     转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...

  8. STL容器的遍历删除

    STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的 ...

  9. STL容器与配接器

    STL容器包括顺序容器.关联容器.无序关联容器 STL配接器包括容器配接器.函数配接器 顺序容器: vector                             行为类似于数组,但可以根据要求 ...

  10. STL容器的本质

    http://blog.sina.com.cn/s/blog_4d3a41f40100eof0.html 最近在学习unordered_map里面的散列函数和相等函数怎么写.学习过程中看到了一个好帖子 ...

随机推荐

  1. JAVA Remote Object

    RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象相互调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另一台计算机上的对象来获 ...

  2. 前端PHP入门-029-文件操作-掌握级别

    人生只有三天,活在昨天的人迷惑:活在明天的人等待:活在今天的人最踏实.你永远无法预测意外和明天哪个来得更早,所以,我们能做的,就是尽最大的努力过好今天.请记住:今天永远是昨天死去的人所期待的明天. f ...

  3. 往android主项目中添加辅助项目

    一个较大的工程往往需要多个项目组成,便于更好的并行开发和管理,但最后还是要合到一起来发布.那如何往主项目里添加其他辅助项目呢? 通常的做法是将辅助项目打包成jar包,像库一样导入到主项目,但是如果我们 ...

  4. webpack4.0.1安装问题及解决方法

    2月底的时候,webpack4正式发布了,但是当我们安装之后,使用下面的语句来打包的时候,发现打包失败了 webpack ./src/main.js ./dist/bundle.js 并且给出了下面这 ...

  5. html中<meta>标签

    这个是html文档一般都有的元素. 1. 介绍 元素基本所有浏览器都支持,它提供页面的元信息,比如描述.关键字.web服务等 位于文档头部的内部,将以名称/值对出现 2. 属性 注意:如果没有name ...

  6. NOIP模拟5

    期望得分:100+100+100=300 实际得分:72+12+0=84 T1  [CQOI2009]中位数图 令c[i]表示前i个数中,比d大的数与比d小的数的差,那么如果c[l]=c[r],则[l ...

  7. Shodan 使用

    本文来自:Shodan新手入坑指南, 记录简要用法,以便使用. 文章先给出搜索过滤方法,然后再简单介绍两种使用shodan的方法:使用命令和编写代码. 搜索过滤 hostname:搜索指定的主机或域名 ...

  8. STL hashtable阅读记录

    unordered_map,unordered_set等相关内容总结: unordered_map和unordered_set是在开发过程中常见的stl数据结构.其本质是hashtable.在SGI_ ...

  9. Linux Kernel代码艺术——数组初始化【转】

    转自:http://www.cnblogs.com/hazir/p/array_initialization.html 前几天看内核中系统调用代码,在系统调用向量表初始化中,有下面这段代码写的让我有点 ...

  10. python操作上级子文件

    . └── folder ├── data │ └── data.txt └── test1 └── test2 └── test.py import os '***获取当前目录***'print o ...