3.8 set/ multiset容器

两个的头文件包含set即可

 

插入数值只有insert方法

不允许重复

#include<iostream>
#include<set>
#include<string>
using namespace std;

// set容器的构造和赋值的操作

void test01()
{
    set<int> s;
    // 插入数据只有insert方式
    s.insert(10);
    s.insert(70);
    s.insert(30);
    s.insert(40);
    // 插入数据的时候会自动排序
    set<int> s2(s); // 拷贝构造
    set<int> s3;
    s3 = s2; // 赋值
}

int main()
{
    test01();
    return 0;
}

 

 

不能resize

 

除了用迭代器的方式删,也可以直接传入元素删除

注意删除是根据排序后的结果进行删除

 

查找:find  返回的是迭代器,不存在返回的是end

统计:count 统计元素个数

set容器count无非是0和1,multiset可能会大于1

 

set插入时候会返回结果,表示是否插入成功,返回的是pair的东西

#include<iostream>
#include<set>
#include<string>
using namespace std;

// set容器的构造和赋值的操作

void test01()
{
    set<int> s;
    pair<set<int>::iterator, bool> ret = s.insert(10);
    if (ret.second) // 第二个数是bool类型的, pair数据的访问用first和second
    {
        cout << "第一次插入成功" << endl;
    }
    else
    {
        cout << "第一次插入失败" << endl;
    }

    // multiset允许插入重复值,插入的时候直接返回迭代器,不会返回是否成功
}

int main()
{
    test01();
    return 0;
}

 

#include<iostream>
#include<set>
#include<string>
using namespace std;

// pair对组的创建

void test01()
{
    // 第一种
    pair<string, int> p("Tom", 20);
    cout << p.first << p.second << endl;

    // 第二种
    pair<string, int> p2 = make_pair < "Jerry", 30);
    cout << p2.first << p2.second << endl;
}

int main()
{
    test01();
    return 0;
}

创建容器的时候就要指定排序方式

利用仿函数指定

 

 

 

 

 

自定义数据类型都会指定排序规则,否则编译器不知道怎么排

 

 

 

posted @ 2021-01-22 22:41  不妨不妨,来日方长  阅读(74)  评论(0编辑  收藏  举报