一、set基本概念
简介:所有元素都会在排序时自动被排序
本质:set/multiset属于关联式容器,底层结构是用二叉树实现。
两者的区别:
set不允许容器中有重复的元素
multiset允许容器中有重复的元素
二、set构造和幅值
set容器插入数据时用insert
set容器插入的数据会自动排序
#include <set>
void printSet(set<int>&s)
{
for (set<int>::iterator it = s.begin(); it != s.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
set<int> s1;
s1.insert(10);
s1.insert(30);
s1.insert(20);
s1.insert(40);
printSet(s1);
set<int> s2(s1);
printSet(s2);
set<int> s3;
s3 = s2;
printSet(s3);
}
三、set大小和交换
size(); //返回容器中元素的数目
empty(); //判断容器是否为空
swap(st); //交换两个集合容器
//大小
void test01()
{
set<int> s1;
s1.insert(10);
s1.insert(30);
s1.insert(20);
s1.insert(40);
if(s1.empty())
{
cout << "s1 为空" << endl;
}
else
{
cout << "s1不为空" << endl;
cout << s1.size() << endl;
}
}
//交换
void test02()
{
set<int> s1;
s1.insert(10);
s1.insert(30);
s1.insert(20);
s1.insert(40);
set<int> s2;
s2.insert(100);
s2.insert(300);
s2.insert(200);
s2.insert(400);
cout << "交换前" << endl;
printSet(s1);
printSet(s2);
cout << endl;
cout << "交换后" << endl;
s1.swap(s2);
printSet(s1);
printSet(s2);
cout << endl;
}
四、set插入和删除
insert(); //在容器中插入元素
clear(); //清除所有元素
erase(pos); //删除os迭代器所指的元素,返回下一个元素的迭代器
erase(beg,end); //删除区间[beg,end)的所有元素,返回下一个元素的迭代器
erase(elem); //删除容器中值为elem的元素
//插入和删除
void test01()
{
set<int> s1;
s1.insert(10);
s1.insert(30);
s1.insert(20);
s1.insert(40);
printSet(s1);
s1.erase(s1.begin());
printSet(s1);
s1.erase(s1.begin(), s1.end());
printSet(s1);
s1.clear();
printSet(s1);
}
五、set查找和统计
find(key); //查找key是否存在,若存在,返回该元素的迭代器,若不存在,返回set.end();
count(key); //统计key的元素个数
//查找和统计
void test01()
{
set<int> s1;
s1.insert(10);
s1.insert(30);
s1.insert(20);
s1.insert(40);
set<int>::iterator pos = s1.find(30);
if(pos!=s1.end())
{
cout << "yes:" << *pos << endl;
}
else
{
cout << "none" << endl;
}
int num = s1.count(30);
cout << num << endl;
}
六、pair对组创建
成对出现的数据,利用对组可以返回两个数据
两种创建方式
pair<type,type> p (value,value2);
pair<type,type> p = make_pair(value1,value2);
//对组创建
void test01()
{
pair<string, int> p(string("Tom"), 20);
cout << "姓名:" << p.first << "年龄:" << p.second << endl;
pair<string, int> p2 = make_pair("jerry", 10);
cout << "姓名:" << p2.first << "年龄:" << p2.second << endl;
}