简介:所有元素在插入时自动被排序
本质:set/multiset属于关联式容器,底层结构是用二叉树实现
set和multiset区别:
- set不允许容器中有重复的元素
- multiset允许有重复的元素
set构造和赋值
- set<T> st
- set(const set& st)
- set& operator=(const set& st)
set大小和交换
- size()
- empty()
- swap()
set插入和删除
- insert(elem)
- clear()
- erase(pos)
- erase(begin,end)
- erase(elem)
set查找和统计
- find(key) //查找key是否存在,返回该键的元素的迭代器,不存在,返回set.end()
- count(key) //统计key的个数
set排序(默认升序,利用仿函数,可以改变排序规则)
#include <iostream>
#include <set>
using namespace std;
class MyCompare
{
public:
//内置数据类型
bool operator()(int v1, int v2) const
{
return v1 > v2;
}
};
void test()
{
set<int, MyCompare> s2;
s2.insert(10);
s2.insert(30);
s2.insert(40);
s2.insert(20);
for (set<int, MyCompare>::iterator it = s2.begin(); it != s2.end(); it++)
{
cout << *it << endl;
}
}
int main()
{
test();
system("pause");
return 0;
}
#include <iostream>
#include <set>
#include <string>
using namespace std;
class Person
{
public:
Person(string name, int age)
{
this->name = name;
this->age = age;
}
string name;
int age;
};
class ComparePerson
{
public:
bool operator()(const Person& p1, const Person& p2) const
{
//按年龄降序
return p1.age > p2.age;
}
};
void test()
{
//自定义数据类型都会指定规则
set<Person,ComparePerson> s;
Person p1("刘备", 34);
Person p2("关羽", 28);
Person p3("张飞", 25);
s.insert(p1);
s.insert(p2);
s.insert(p3);
for (set<Person, ComparePerson>::iterator it = s.begin(); it != s.end(); it++)
{
cout << "姓名:" << it->name << "\t" << "年龄:" << it->age << endl;
}
}
int main()
{
test();
system("pause");
return 0;
}