C++:STL容器–>set

作者 : admin 本文共1926个字,预计阅读时间需要5分钟 发布时间: 2024-06-16 共3人阅读

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

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

1. 构造函数

set 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容器不允许插入重复值
C++:STL容器–>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;
}

C++:STL容器–>set插图(1)

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;
}

C++:STL容器–>set插图(2)

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;
}

C++:STL容器–>set插图(3)

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;
}

C++:STL容器–>set插图(4)

本站无任何商业行为
个人在线分享 » C++:STL容器–>set
E-->