C++:STL容器-->set

使用set容器时需要导入头文件:#include <set>

set和multiset区别:
set不允许容器中有重复的元素
multiset允许容器中有重复的元素

1. 构造函数

set<T> st;
set s(const &st);

void printSet(set<int>& s)
{
    for (set<int>::const_iterator it = s.begin();it!=s.end();it++)
    {
        cout << *it << ends;
    }
    cout << endl;
}
int main() {

    set<int> s;
    // 默认构造函数
    s.insert(20);
    s.insert(10);
    s.insert(30);
    s.insert(-10);
    printSet(s);

    set<int> s1(s);
    printSet(s1);
    // 拷贝构造

    set<int> s2 = s1;
    // 赋值
    printSet(s2);
    
    return 0;
}

特点:1. 所有元素插入时自动被排序;2. set容器不允许插入重复值
在这里插入图片描述

2. set容器–大小和交换

size(); // 返回容器中元素的数组
empty(); // 判断容器是否为空
swap(); // 交换两个集合容器

int main() {

    set<int> s;
    // 默认构造函数
    s.insert(20);
    s.insert(10);
    s.insert(30);
    s.insert(-10);
    printSet(s);

    cout << "s的大小为:" << s.size() << endl;
    if(!s.empty())
    {
        cout << "s不为null" << endl;
    }
    else
    {
        cout << "s为null" << endl;
    }

    set<int> s2;
    s2.insert(100);
    s2.insert(-90);
    printSet(s2);

    s.swap(s2);
    printSet(s);
    printSet(s2);
    
    return 0;
}

在这里插入图片描述

3. 插入和删除

insert(elem);
clear();
erase(pos); // 删除pos迭代器所指的元素,返回下一个元素的迭代器
erase(beg,end); // 删除区间[beg,end)的所有元素,返回下一个元素的迭代器
erase(elem); // 删除容器中值为elem的元素

int main() {

    set<int> s;
    // 默认构造函数
    s.insert(20);
    s.insert(10);
    s.insert(30);
    s.insert(-10);
    s.insert(-120);
    printSet(s);

    set<int>::iterator beg = s.begin(),end=s.end();
    beg ++;
    end --;
    s.erase(beg,end);
    // -120 -10 10 20 30
    printSet(s);

    beg = s.begin();
    s.erase(beg);
    // 30
    printSet(s);

    return 0;
}

在这里插入图片描述

4. 查找和统计

find(key); // 查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(key); // 统计key的元素个数

int main() {

    set<int> s;
    // 默认构造函数
    s.insert(20);
    s.insert(10);
    s.insert(30);
    s.insert(-10);
    s.insert(-120);
    printSet(s);

    auto it = s.find(-120);
    if(it !=s.end())
    {
        cout << "容器s中存在元素-120"<< endl;
    }
    else
    {
        cout << "容器s中不存在元素-120"<< endl;
    }

    int a = s.count(-120);
    cout << "set容器-120的个数为:" << a << endl;
    return 0;
}

在这里插入图片描述

5. set容器的排序

set容器默认排序规则为从小到大

class MyCompare{
public:
    bool operator()(int v1,int v2)
    {
        return v1 > v2;
    }
};
// 降序

int main() {

    set<int> s;
    // 默认构造函数
    s.insert(20);
    s.insert(10);
    s.insert(30);
    s.insert(-10);
    s.insert(-120);
    printSet(s);
    // 升序

    set<int,MyCompare> s1;
    s1.insert(20);
    s1.insert(10);
    s1.insert(30);
    s1.insert(-10);
    s1.insert(-120);
    for (set<int,MyCompare>::iterator it = s1.begin();it!=s1.end();it++)
    {
        cout << *it << ends;
    }
    // 降序
    cout << endl;
    return 0;
}

在这里插入图片描述

相关推荐

  1. set容器

    2024-06-15 19:48:01       39 阅读
  2. C/C++ - 容器set

    2024-06-15 19:48:01       43 阅读
  3. C++容器——set

    2024-06-15 19:48:01       26 阅读
  4. C++容器——unordered_set浅谈

    2024-06-15 19:48:01       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-15 19:48:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-15 19:48:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-15 19:48:01       82 阅读
  4. Python语言-面向对象

    2024-06-15 19:48:01       91 阅读

热门阅读

  1. docker

    docker

    2024-06-15 19:48:01      24 阅读
  2. php环境变量$_ENV详解

    2024-06-15 19:48:01       35 阅读
  3. 新视野大学英语2 词组 6.15

    2024-06-15 19:48:01       33 阅读
  4. 大数据计算入门指南

    2024-06-15 19:48:01       25 阅读
  5. t265 坑

    2024-06-15 19:48:01       16 阅读
  6. 用Unity创造自己的绿洲

    2024-06-15 19:48:01       27 阅读
  7. Cargo 教程

    2024-06-15 19:48:01       28 阅读
  8. 第壹章第14节 C#和TS语言对比-委托事件(仅C#)

    2024-06-15 19:48:01       26 阅读