STL— set

转自:

https://www.cnblogs.com/xenny/p/9362743.html

https://www.cnblogs.com/isChenJY/p/11535335.html

 

 

1,性质

set 遵循数学集合三特性,无重复、无序性、确定性

其中,set 中内置红黑树进行排序,所以插入删除效率很高。

 

2,基操

int a[] = {1,2,3,4,5};
    set<int>q;
    
    q.insert(x);      //集合中插入元素
    q.insert(a,a+5);  //插入数组a至a+5的元素
    q.find(x);        //返回x值位置的迭代器,找不到返回q.end()  
    q.erase(iter);    //删除集合中的元素
    q.size();         //返回当前set容器中的元素个数
    q.count();        //返回某个值元素的个数(根据set的特性,就是判断这个元素在不在,返回0或1)
    q.begin();        //返回头位置迭代器
    q.end();          //返回尾位置迭代器

    q.rbegin();       //返回尾部反向迭代器
    q.rend();         //返回头部反向迭代器
    q.clear();        //删除set容器中的所有的元素
    q.empty();        //判断set容器是否为空
    q.lower_bound();  //返回指向大于(或等于)某值的第一个元素的迭代器,如果value大于 [ begin, end) (半开区间)的任何一个元素,则返回 end
    q.upper_bound();  //返回大于某个值元素的迭代器

 

3,函数

 insert(x):可将 x 插入 set 容器中,并自动递增排序和去重,时间复杂度O(logN) 

 

 5,排序与遍历

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<set>
using namespace std;
struct Edge {
	int to, w;
};
struct cmp {
	bool operator() (const Edge &a, const Edge &b) const{
		return a.to < b.to;
	}
};
int main(void)
{
	set<Edge, cmp>s; // 重写排序
	s.insert({ 3, 5 });
	s.insert({ 2, 6 });
	s.insert({ 4, 7 });
	s.insert({ 1, 8 });
	for (auto it = s.begin(); it != s.end(); it++)
	{
		Edge vi = *it;
		int to = vi.to, w = vi.w;
		printf("%d\n", to);
	}
	system("pause");
	return 0;
}

 

  

 

========= ======== ======== ======= ====== ====== ==== === == =

  定风波  苏轼 宋

三月七日,沙湖道中遇雨。雨具先去,同行皆狼狈,余独不觉。已而遂晴,故作此词。

莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。
料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴

 

posted @ 2020-03-31 00:55  叫我妖道  阅读(165)  评论(0编辑  收藏  举报
~~加载中~~