核心: 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. Centos 修改limits.conf open files后不生效的解决办法

    线上几台APACHE服务器报过三.四次open files的问题,导致服务不可用,执行ulimit -n 查看后,发现是默认的1024,找到原因所在了,就去修改下/etc/security/limit ...

  2. Java 8 Stream 用法

    一.Stream是什么 Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator.原始版本的 Iterator,用户只能显式地一个一个遍历元 ...

  3. 重构改善既有代码设计--重构手法15:Remove Middle Man (移除中间人)

    某个类做了过多的简单委托动作.让客户直接调用受托类. 动机:在Hide Delegate (隐藏委托关系)的“动机”中,谈到了“封装委托对象”的好处.但是这层封装也是要付出代价的,它的代价是:每当客户 ...

  4. Css Sprite 图片等比缩放图片大小

    图片大小80*40,即每张图片大小40*40,如何以20*20显示图片?1. 首先看下如何以40*40显示第二张图片: 正常显示css代码 .sprite { background-image: ur ...

  5. ③ 设计模式的艺术-03.工厂方法(Factory Method)模式

    public interface Car { void run(); } public class Audi implements Car { @Override public void run() ...

  6. Shiro实战教程(二)

    http://www.jianshu.com/p/6786ddf54582/ https://www.cnblogs.com/ealenxie/p/10610741.html

  7. 【STSRM13】绵津见

    [算法]扫描线:差分+树状数组 [题意]转化模型后:求每个矩形覆盖多少点和每个点被多少矩形覆盖.n<=10^5. [题解]经典的扫描线问题(二维偏序,二维数点). 数点问题 将所有询问离线并离散 ...

  8. 【CodeForces】889 B. Restoration of string

    [题目]B. Restoration of string [题意]当一个字符串在字符串S中的出现次数不小于任意子串的出现次数时,定义这个字符串是高频字符串.给定n个字符串,求构造出最短的字符串S满足着 ...

  9. Linux内核中的队列 kfifo【转】

    转自:http://airekans.github.io/c/2015/10/12/linux-kernel-data-structure-kfifo#api 在内核中经常会有需要用到队列来传递数据的 ...

  10. python使用requests模块模拟登陆知乎

    from bs4 import BeautifulSoup import requests import time def captcha(captcha_data): with open(" ...