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