set容器详解

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: /*#include<iostream>#include<set>using namespace std;/** set 容器* 所有元素在插入时都会自动排序* 本质:* set/multiset 属于关联式容器,底层结构是用二叉树实现的* * * * set和multiset区别:* set不允许有重复的元素,在插入时会返回插入结果,表示插入是否成功* * multiset 可以有重复的元素,不会检测数据,因此可以重复* set构造和赋值* set<T> st; 默认构造函数* set(const set& st); 拷贝构造函数* 赋值:* s
# include<iostream>
 #include<set>
using namespace std;

/*

  • set 容器
  • 所有元素在插入时都会自动排序
  • 本质:
  • set/multiset 属于关联式容器,底层结构是用二叉树实现的
  • set和multiset区别:

  • set不允许有重复的元素,在插入时会返回插入结果,表示插入是否成功

  • multiset 可以有重复的元素,不会检测数据,因此可以重复
  • set构造和赋值

  • set st; 默认构造函数
  • set(const set& st); 拷贝构造函数
  • 赋值:
  • set& operator=(const set& st); 重载=赋值

大小和交换

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

插入删除操作

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

查找和统计

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

pair对组创建

两种创建方式:
pair p(val1,val2);
pair p=make_pair(val1,val2);

set排序:内置类型排序

默认规则 从小到大
利用仿函数,改变排序规则
仿函数yong类调用函数

自定义类型排序:

对于自定义类型数据,一定要制定排序规则
*/

 void printset(set<int>& s)  

{
for (set<int>::iterator it = s.begin(); it != s.end(); it++)
{
    cout << *it << " ";
}
cout << endl;

}


  void test01()

{
set<int>s;
s.insert(20);
s.insert(20);//即使插入重复的元素,也会按一个元素算
s.insert(10);
s.insert(30);
s.insert(30);
s.insert(30);
printset(s);

set<int>s1;
s1 = s;//赋值构造
set<int>s3(s);
printset(s3);
s3.erase(20);
s3.erase(s3.begin());
printset(s3);
set<int>::iterator it = s.find(30);//find()返回迭代器
cout << "zhaochaowei:" << *it << endl;
int num = s.count(30);
//不管有几个30,num要么为1,要么为0
cout << "num=" << num << endl;

}

void test02()

{
//对组创建一:
pair<string, int>p("xiaojiejie", 20);

cout << p.first << endl << p.second << endl;
//对组创建二:
pair<string, int>p1 = make_pair("jiejeixue", 21);


 cout << p1.first << endl << p1.second << endl;

}


    class comp

{

public:
bool operator()(int val, int vall)const

//必须要const加在仿函数后面
{
    return val > vall;
}


};

void test03()

{

    set<int>s;//默认排序  从小到大
s.insert(10);
s.insert(30);
s.insert(20);
s.insert(40);
printset(s);

set<int, comp>s2;
s2.insert(10);
s2.insert(30);
s2.insert(20);
s2.insert(40);
for (set<int, comp>::iterator itt = s2.begin(); itt != s2.end(); itt++)


   {
    cout << *itt << " ";

}
cout << endl;

}

class person

{

public:
person(string name, int age)
{
    this->name = name;
    this->age = age;
}
int age;
string name;

};

class com

{

public:
bool operator()(const person& p1, const person& p2)const
{
    return p1.age > p2.age;
}

};



    void test04()

{
//自定义类型,比较仿函数
set<person,com>s;

person p1("xiaojiejie", 10);
person p2("xiaojie", 60);
person p3("jiejie", 20);

s.insert(p1);
s.insert(p2);
s.insert(p3);
for (set<person, com>::iterator it = s.begin();it != s.end(); it++ )

    {
    cout << it->age << it->name << endl;

    }



}

int main()

{
//test01();

//    test02();
//test03();
test04();
system("pause");
return 0;

}
目录
相关文章
|
1天前
|
C++ 容器
C++之set/multiset容器
C++之set/multiset容器
4 1
|
2天前
|
编译器 C++ 容器
通过红黑树封装 map 和 set 容器
通过红黑树封装 map 和 set 容器
|
6天前
|
存储 算法 NoSQL
C++一分钟之-map与set容器详解
【6月更文挑战第21天】C++ STL的`map`和`set`是基于红黑树的关联容器,提供有序存储和高效查找。`map`存储键值对,键唯一,值可重复;`set`仅存储唯一键。两者操作时间复杂度为O(log n)。常见问题包括键的唯一性和迭代器稳定性。自定义比较函数可用于定制排序规则,内存管理需注意适时释放。理解和善用这些工具能提升代码效率。
12 3
|
1月前
|
C++ 容器
黑马c++ STL部分 笔记(8) set/ multiset 容器
黑马c++ STL部分 笔记(8) set/ multiset 容器
|
1月前
|
C++ 容器
C++入门到理解set/multiset容器、pair对组
C++入门到理解set/multiset容器、pair对组
C++入门到理解set/multiset容器、pair对组
|
1月前
|
存储 C++ 容器
set容器一自定义数据类型指定排序规则讲解
set容器一自定义数据类型指定排序规则讲解
54 1
|
1月前
|
存储 C++ 容器
set容器-内置类型指定排序规则讲解
set容器-内置类型指定排序规则讲解
30 0
|
1月前
|
C++ 容器
set容器-构造和赋值讲解
set容器-构造和赋值讲解
29 0
|
1月前
|
存储 C++ 容器
set容器-set和multiset区讲解
set容器-set和multiset区讲解
24 0
|
7月前
|
API C++ 容器
79 C++ - set/multiset容器
79 C++ - set/multiset容器
36 0