简介

Set封装了C++中的集合,他的主要作用是排序和去重,我们来详细看下:

------------------------------------------------------------------------------------------------------------------------------珂爱的分割线------------------------------------------------------------------------------------------------------------------------------

头文件

#include <set>

#include <bits/stdc++.h>

在写代码的时候,必须写上这两个头文件中的一个还有using namespace std;,这样就可以定义set了。

#include <set>
#include <iostream>
using namespace std;
int main()
{
    
    return 0;
}

定义

set<T> S;

T:C++任意一个类型,如:int, char, string, STL里的也可以,比如set<vector<int> > s1; set<vector<pair<int, int> > > s2; S:你定义的变量名,以下都用s代替

------------------------------------------------------------------------------------------------------------------------------珂爱的分割线------------------------------------------------------------------------------------------------------------------------------

函数

链接炸了评论区找我(

返回set容器第一个元素的迭代器

用法:

s.begin();

返回指向容器中第一个元素的常量迭代器。 set容器中的所有迭代器都是常量迭代器(包括const_iteratoriterator成员类型)。它们不能用来修改它们所指向的内容,但可以正常地增加和减少(除非它们本身也是常量)。 如果容器为空,则返回的迭代器值不应被取消引用。 跟begin差不多(

没什么用(

用法:

s.cbegin();

返回一个指向容器中结束元素的常量迭代器。 跟end差不多(

用法:

s.cend();

把当前集合(set)清空,让当前集合的大小为0

用法:

s.clear();

将在容器中x的个数返回,(count(x))

用法:

s.count(x);

顾名思义,反向开头(就是结尾),没什么用(

用法:

s.crbegin();

顾名思义,反向结尾(就是开头),没什么用(

用法:

s.crend();

就是insert

用法:

s.emplace(x);

在集合中插入新元素(如果唯一),并在插入位置上给出提示。这个新元素是使用arg作为其构造参数就地构造的。 只有在容器中没有其他元素与被放置的元素等效时才会进行插入(集合容器中的元素是唯一的)。 如果插入,这将有效地将容器大小增加一个。 位置中的值用作插入点的提示。尽管如此,元素仍将按照其内部比较对象描述的顺序插入到其相应的位置,但函数使用此提示开始搜索插入点,当实际插入点位于位置或接近该位置时,该过程会大大加快。 总结:最好别用(

用法:

bool类型,如果当前几何还有元素,返回true,否则返回false

用法

if(s.empty())
    cout << "集合是空的" << endl;
else
    cout << "集合有元素" << endl;

返回一个指针,当前容器的末尾

用法

set<int>::iterator it = s.end();

删除一个元素或一个指针的元素

用法

std::set<int> myset;
std::set<int>::iterator it;
myset.erase (it);
myset.erase (40);

在容器中搜索等价于val的元素,如果找到,则返回迭代器,否则返回迭代器给set::end。

s.find(x);

插入一个元素,详细点上面这个就可以去官网看了

查找第一个大于或等于x的数字,找到返回该数字的地址,不存在则返回end。

查找第一个小于或等于x的数字,找到返回该数字的地址,不存在则返回end。

目前容器有过的最大容量

cout << s.max_size() << endl;

目前容器的容量

cout << s.size() << endl;

------------------------------------------------------------------------------------------------------------------------------珂爱的分割线------------------------------------------------------------------------------------------------------------------------------

遍历

遍历需要有迭代器iterator

#include <set>
#include <iostream>
using namespace std;
int main()
{
    set<int> s;
    s.insert(1);
    s.insert(1);
    s.insert(4);
    s.insert(5);
    s.insert(1);
    s.insert(4);
    s.insert(1);
    s.insert(9);
    s.insert(1);
    s.insert(9);
    s.insert(8);
    s.insert(1);
    s.insert(0);
    for(set<int>::iterator it = s.begin(); it != s.end(); it++)
        cout << *it << " ";
}

输出:

0 1 4 5 8 9
#include <set>
#include <iostream>
using namespace std;
int main()
{
    set<char> s;
    s.insert('a');
    s.insert('b');
    s.insert('d');
    s.insert('b');
    s.insert('a');
    s.insert('b');
    s.insert('c');
    s.insert('b');
    s.insert('c');
    s.insert('c');
    s.insert('a');
    s.insert('a');
    s.insert('a');
    for(set<char>::iterator it = s.begin(); it != s.end(); it++)
        cout << *it << " ";
}

输出:

a b c d

例题: 明明的随机数

就可以用set,其实他大多是作为工具出现在题目里面,一般专门考这个的很少。

求评论QAQ

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!