STL——set/multiset容器
基本概念
所有元素都会在插入时自动被排序
本质
set/multiset属于关联式容器,底层是由二叉树实现
set和multiset的区别
set不允许容器有重复元素
multiset允许容器有重复的元素
set构造和复制
构造
set<T> st; 默认构造函数
set(const set &st); 拷贝构造函数
赋值
set& operator=(const set &st);重载等号运算符
#include<iostream>
#include<set>
using namespace std;
void PrintSet(const set<int>& a)
{
for (set<int>::iterator begin = a.begin(); begin != a.end(); begin++)
{
cout << *begin << endl;
}
}
void test01()
{
set<int>s1;
s1.insert(3);
s1.insert(2);
s1.insert(1);
s1.insert(4);
s1.insert(5);
PrintSet(s1);
set<int>s2 = s1;
PrintSet(s2);
}
int main()
{
test01();
return 0;
}
set大小和交换
size();返回大小
empty();判断是否为空
swap(st);//交换两个容器
#include<iostream>
#include<set>
using namespace std;
void PrintSet(const set<int>& a)
{
for (set<int>::iterator begin = a.begin(); begin != a.end(); begin++)
{
cout << *begin << endl;
}
}
void test01()
{
set<int>s1;
s1.insert(3);
s1.insert(2);
s1.insert(1);
s1.insert(4);
s1.insert(5);
set<int>s2;
s2.insert(10);
s2.swap(s1);
PrintSet(s1);
PrintSet(s2);
if (s2.empty())
{
cout << "s2 is empty" << endl;
}
else
{
cout << "s2's size"<<s2.size() << endl;
}
}
int main()
{
test01();
return 0;
}
set插入和删除
insert(elem); set/multiset只有这个插入
clear();
erase(pos); 删除pos迭代器指向的元素,,返回一下元素的迭代器
erase(beg,end);删除[beg,end)的所有元素,返回一下元素的迭代器
erase(elem); 删除指定值的元素
#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);
//删除
s1.erase(s1.begin());
printSet(s1);
s1.erase(30);
printSet(s1);
//清空
//s1.erase(s1.begin(), s1.end());
s1.clear();
printSet(s1);
}
int main() {
test01();
system("pause");
return 0;
}
set查找和统计
find(key); key是否存在
count(key); 统计key元素个数
#include <set>
//查找和统计
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 << "找到了元素 : " << *pos << endl;
}
else
{
cout << "未找到元素" << endl;
}
//统计
int num = s1.count(30);
cout << "num = " << num << endl;
}
int main() {
test01();
system("pause");
return 0;
}
pair对组创建
成对出现的数据,利用对组可以返回两个数据
pair创建方式
-
pair<type, type> p ( value1, value2 );
-
pair<type, type> p = make_pair( value1, value2 );
pair示例
#include <string>
//对组创建
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;
}
int main() {
test01();
system("pause");
return 0;
}