set/multiset容器
set基本概念
所有元素都会在插入时自动排序
本质: set/multiset属于关联式容器,底层结构是用二叉树实现
set和multiset区别
set不允许容器中有重复的元素,set插入数据的同时会返回插入结果,表示插入是否成功
multiset允许容器中有重复的元素,multiset不会检测数据
set构造和赋值
set< T > st;
set(const set &st);
set &operator = (const set &st); 重载等号操作符
set容器插入数据时用insert
set大小与交换
size();
empty();
swap(st);
set插入和删除
insert(elem);
clear();
erase(pos); 删除pos迭代器指的元素,返回下一个元素的迭代器
erase(beg, end); 删除区间[beg, end)的所有元素,返回下一个元素的迭代器
erase(elem); 删除容器中值为elem的元素
set查找和统计
find(key); 查找key是否存在,返回该键的元素的迭代器,若不存在,返回set.end();
count(key); 统计key的元素个数
set容器排序规则为:默认排序为从小到大
pair对组创建
pair< type, type > p(value 1, value 2);
pair< type, type > p = make_pair(value 1, value 2);
map/multimap容器
map基本概念
mao中所有元素都是pair
pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
所有元素都会根据元素的键值自动排序
本质:map/multimap属于关联式容器,底层结构是用二叉树实现
优点
可以根据key值快速找到value值
map和multimap区别
map不允许容器中有重复key值元素
multimap允许容器中有重复key值元素
map构造和赋值
map< T1, T2 > mp;
map(const map &mp);
map &operator = (const map &mp);
map大小和交换
size();
empty();
swap(st);
map插入和删除
insert(elem);
clear();
erase(pos); 删除pos迭代器指的元素,返回下一个元素的迭代器
erase(beg, end); 删除区间[beg, end)的所有元素,返回下一个元素的迭代器
erase(key); 删除容器中值为key的元素
map查找和统计
find(key); 查找key是否存在,返回该键的元素的迭代器,若不存在,返回set.end();
count(key); 统计key的元素个数
map容器排序
map容器默认排序规则为:按照key值进行从大到小排序
map和set均可利用仿函数改变排序规则;
仿函数例:
class MyCompare
{
public:
bool operator()(int v1, int v2)
{
return v1 > v2;
}
};
set仿函数例:set< int, MyCompare >
map仿函数例:map< int, int, MyCompare >
妙啊