C++STL常用内容使用总结

一、 set

1. 容器特性

二叉搜索树(排序树);有序;唯一;无法修改;高效查找、插入、删除

set是按照特定顺序存储唯一元素的容器。

在set中,元素的值也标识它(值本身是键,类型T),并且每个值必须是唯一的。集合中元素的值不能在容器中修改一次(元素总是常量),但可以从容器中插入或删除它们。

在内部,集合中的元素总是按照其内部比较对象(类型为Compare)指示的特定严格弱排序标准进行排序

set容器通常比unordered_set容器通过键访问单个元素的速度更慢,但是它们允许根据子集的顺序直接迭代。

set通常被实现为二分搜索树

2. 常用方法

#include


set s 创建一般递增顺序的set

set<int, greater > s 创建递减顺序的set


s.begin()  返回set容器的第一个元素

s.end()      返回set容器的最后一个元素

s.empty()     判断set容器是否为空

s.size()     返回当前set容器中的元素个数


s.insert() 插入一个元素

s.erase() 删除一个元素(参数可以为迭代指针、元素数值)

s.clear() 删除set容器中的所有的元素


s.find() 查找一个元素,返回迭代指针;如果容器中不存在该元素,返回值等于s.end()

s.lower_bound() 返回第一个大于或等于给定关键值的元素,返回迭代指针

s.upper_bound() 返回第一个大于给定关键值的元素,返回迭代指针

s.equal_range() 返回一对定位器,分别表示 第一个大于或等于给定关键值的元素 和 第一个大于给定关键值
的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于
s.end()

3. 注意事项

  1. 为保证元素的唯一性,也是基于二叉搜索树的特性,set无法就地修改元素。要想达到修改效果,只能先删除旧再插入新值。
  2. 如果想要同时保留多个相同值的元素,则可使用multiset

二、 map

1. 容器特性

二叉搜索树;有序;唯一;键不可改,值可修改;高效查找、插入、删除

map是按照特定顺序存储由键值和映射值的组合形成的元素的关联容器。

在映射中,键值通常用于排序和唯一标识元素,而映射值存储与此键相关联的内容。键和映射值的类型可能不同,并在成员类型value_type中组合在一起,value_type是一种组合了两者的配对类型:

typedef <const key,T> value_type;

在内部,映射中的元素始终按照其键排序,遵循其内部比较对象(类型为Compare)指示的特定严格弱排序标准。

map容器通常比unorder_map容器通过键访问单个元素的速度更慢,但它们允许根据子集的顺序直接迭代。

映射中的映射值可以使用括号运算符(operator[])通过其对应的键直接访问。

map通常被实现为二分搜索树。

2.常用方法

#include


mp[key k] 引用访问键为ky的元素,不存在则用用默认构造方法创建对应key的元素

mp.at(key k) 引用访问键为k的元素,不存在则抛出异常

mp.insert(value_type v) 插入键值对参数类型为value_type,即pair<const key,value>


mp.find(key k) 查找键为k对应的元素,返回迭代指针;不存在则返回mp.end()

mp.count(key k) 统计键k的出现次数,但只能用于判断元素是否存在,返回0或1

mp.lower_bound(key k)

mp.upper_bound(key k)

mp.equal_range(key k)


mp.erase(key k)

mp.erase(iter it)

mp.erase(iter begin,iter end)

按照不同的方式来删除指定元素

3.注意事项

  1. 在使用下标[]访问map时,如果k与容器中任何元素的键都不匹配,则函数将插入具有该键的新元素,并返回对其映射值的引用。请注意,这总是将容器大小增加1,即使没有为元素分配映射值(元素是使用其默认构造函数构造的;对于基本数据类型,默认值为0)

  2. 类似的成员函数map:at在具有键的元素存在时具有相同的行为,但在不存在时抛出异常

  3. 下标访问等效于:
    (*(this->insert(make_Pair(k,map_type().first).second

三、 priority_queue

1. 容器特性

优先队列;堆;有序;动态获得最“大(优先级)”元素

priority_queue默认使用vector作为基础容器,利用make_heap, push_heap和pop_heap三个函数实现了堆(默认是大顶堆),使得我们可以动态地获得最大元素

2.常用方法

#include


priority_queue q 默认(大顶堆)

priority_queue<int, vector, less > q; 大顶堆

priority_queue<int, vector, greater > q; 小顶堆

priority_queue<int, vector, cmp > q; 自定义优先级的堆


q.empty() 如果队列为空返回真

q.top() 返回优先队列对顶元素

q.pop() 删除堆顶元素

q.push(T value) 加入一个元素value

q.size() 返回优先队列中拥有的元素个数

3.注意事项

  1. 很多时候为了实现小顶堆(取出最小元素),我们也可以“错误”地重载运算符
friend bool operator<(const T & a,const T & b)
{
    return a.n>b.n;
}
  1. 由于放入priority_queue后,元素的顺序发生了变化。很多时候,我们希望能得到元素的原始索引,这样我们只能通过定义结构体记录元素值和索引值、并重载运算符来实现这一目的。方便起见,我们可以使用pair<T,int> 来充当这种结构体。注意,pair的大小比较优先级为first、second.

四、algorithm

fill(iter begin,iter end,T value)

sort(iter begin,iter end[, cmp])

random_shuffle(iter begin,iter end)


binary_search(iter begin,iter end,T value[, cmp])

lower_bound(iter begin,iter end,T value[, cmp])

upper_bound(iter begin,iter end,T value[, cmp])

equal_range(iter begin,iter end,T value[, cmp])


swap(ob1,ob2)

max(T a,T b)

min(T a,T b)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值