set容器

  • set介绍
  • set头文件
  • set定义
  • 遍历set
  • set元素反向输出
  • set函数
  • 1)insert()插入一个元素
  • 2)erase()删除元素
  • 1‘ 删除一个元素
  • 2’ 删除一个元素
  • 3'删除区间
  • 3)clear()清空set
  • 4)empty()判断set是否为空
  • 5)size() 返回元素个数
  • 6)find(K) 返回一个迭代器,指向键值K
  • 7)count() 判断是否存在一个元素
  • 8)不常用的函数
  • 1‘第一个不小于k【大于或等于k】的元素lower_bound(k)
  • 2’第一个大于k的元素upper_bound(k)
  • 3‘ equal_range().first


set介绍

set是关联容器的一种,是已排好序的集合(其中的元素按照升序排序)。set和multiset类似。但是,set内不能有可重复的元素,但是multiset去可以有重复的元素。同时,set容器中的元素如果被修改后,容器并不会自动调整顺序,如果修改set内的元素,会破坏容器的有序性。我们为了修改某个值,可以先删除掉其中的那个元素,然后再插入我们一个想要更改称为的元素。

set头文件

#define<set>

set定义

set<int> s;

遍历set

s.begin();   返回set容器的第一个元素
s.end();	 返回set容器的最后一个元素
set<int> s;
    s.insert(1);
    s.insert(38);
    s.insert(5);
    s.insert(38);
    set<int>::iterator it;
    
    for (it = s.begin(); it != s.end(); it ++){
        cout << *it << endl;//必须要有 “ * ”
    }
    /*
    1
    5
    38
    */

set元素反向输出

set<int> s;
    s.insert(1);
    s.insert(38);
    s.insert(5);
    s.insert(3);
    set<int>::reverse_iterator rit;
    
    for (rit = s.rbegin(); rit != s.rend(); rit ++){
        cout << *rit << endl;//必须要有 “ * ”
    }
    /*
    38
    5
    3
    1
    */

set函数

set<Type> A;

1)insert()插入一个元素

2)erase()删除元素

1‘ 删除一个元素

set<int> s;
    s.insert(1);
    s.insert(38);
    s.insert(5);
    s.insert(3);
    s.erase(5);
    set<int>::iterator it;
    
    for (it = s.begin(); it != s.end(); it ++){
        cout << *it << endl;//必须要有 “ * ”
    }
    /*
    1
    3
    38
    */

2’ 删除一个元素

set<int> s;
    s.insert(1);
    s.insert(38);
    s.insert(5);
    s.insert(3);
    set<int>::iterator it = s.begin();
    s.erase(++it);//it只支持++ -- 操作,不支持it + 3
    
    for (it = s.begin(); it != s.end(); it ++){
        cout << *it << endl;//必须要有 “ * ”
    }
    /*
    1
    5
    38
    */

3’删除区间

set<int> s;
    s.insert(1);
    s.insert(38);
    s.insert(5);
    s.insert(3);
    set<int>::iterator it = s.begin();
    set<int>::iterator itt = s.end();
    s.erase(it, itt);//it只支持++ -- 操作,不支持it + 3
    
    for (it = s.begin(); it != s.end(); it ++){
        cout << *it << endl;//必须要有 “ * ”
    }
    /*
    
    */

3)clear()清空set

set<int> s;
    s.insert(1);
    s.insert(38);
    s.insert(5);
    s.insert(3);
    s.clear();
    
    set<int>::iterator it;
    for (it = s.begin(); it != s.end(); it ++){
        cout << *it << endl;//必须要有 “ * ”
    }
    /*
    
    */

4)empty()判断set是否为空

set<int> s;
    s.insert(1);
    s.insert(38);
    s.insert(5);
    s.insert(3);
    
    if (s.empty()) puts("yes");
    else puts("no");
    //no

5)size() 返回元素个数

set<int> s;
    s.insert(1);
    s.insert(38);
    s.insert(5);
    s.insert(3);
    
    cout << s.size() << endl;//4

6)find(K) 返回一个迭代器,指向键值K

查找一个键值,则返回该键值迭代器的位置,否则,返回最后一个元素后面的一个位置,也就是end()

set<int> s;
    s.insert(1);
    s.insert(38);
    s.insert(5);
    s.insert(3);
    set<int>::iterator it;
    if (s.find(5) != s.end()) puts("yes");
    else puts("no");
    //yes
    it = s.find(3);
    if (it != s.end()) cout << *it << endl;
    else puts("no");
    //3

7)count() 判断是否存在一个元素

set<int> s;
    s.insert(1);
    s.insert(38);
    s.insert(5);
    s.insert(3);
    cout << s.count(1) << endl;//找到1,返回1
    cout << s.count(2) << endl;//未找到2,返回0
    cout << s.count(3) << endl;//未找到3,返回1

8)不常用的函数

1‘第一个不小于k【大于或等于k】的元素lower_bound(k)

返回一个迭代器,指向键值不小于k的第一个元素

2’第一个大于k的元素upper_bound(k)

返回一个迭代器,指向键值大于k的第一个元素

3‘ equal_range().first

set<int> s;
    s.insert(1);
    s.insert(38);
    s.insert(5);
    s.insert(3);

    cout << "返回第一个不小于3的元素" << *s.lower_bound(3) << endl;//返回第一个不小于3的元素3
    cout << "返回第一个大于3的元素" << *s.upper_bound(3) << endl;//返回第一个大于3的元素5
    cout << "第一个大于或等于3的元素" << *s.equal_range(3).first << endl;//第一个大于或等于3的元素3
    cout << "第一个大于3的元素" << *s.equal_range(3).second << endl;//第一个大于3的元素5