C++STL之multiset,set,multimap,map

C++ STL学习笔记

这篇笔记是对慕课上郭炜老师的c++课程自己的总结,方便日后复习
平衡二叉树作用:需要在大量增删数据的同时大量查找数据并都能在log(n)复杂度完成。
四种**“排序容器”**:multiset,set,multimap,map
注:使用multiset和set要用头文件#include<set>
使用multimap和map要用头文件#include<map>

1.multiset用法

  1. 默认用法
multiset <T> st;//默认从小到大
multiset <T,greater<T>>st;//从大到小

➢定义了一个multiset<T类型>的变量stst里面可以存放T类型的数据,并且能自动排序开始st为空
排序规则: 表达式“a < b”为true, 则a排在b前面。
➢可用st.insert添加元素,st.find查找元素,st.erase删除元素,复杂度都是log(n)。

#include <iostream>
#include <cstring>
#include <set>
using namespace std;
int main()
{
   
	multiset<int> st;
	int a[10]={
   1,14,12,13,7,13,21,19,8,8};
	for(int i=0;i<10;++i)
		st.insert(a[i]);//把数组a[i]的内容复制放入容器st中
		multiset<int>::iterator i;//迭代器,近似于指针,用于访问容器st
	for(i=st.begin();i!=st.end();++i) //st.begin()和st.end()为st指向头元素和尾元素后面一个位置的迭代器,类型为multiset<T>::iterator
		cout<<*i<<",";
		cout<<endl;		//输出排好序的数组a[i]:1,7,8,8,12,13,13,14,19,21
}
  • multiset上的迭代器multiset <T>::iterator P;
    此处p是迭代器,相当于指针,只能通过迭代器访问multiset的元素。
    与指针的相同与不同:
    相同点:可++,–,用!= 和==比较
    不同点:不可比大小,不可加减整数,不可相减

继续使用上例迭代器i 其中元素为{1,7,8,8,12,13,13,14,19,21}

{
   
i=st.lower_bound(13);//返回最靠后的迭代器it使左闭右开的区间[begin(),it)中的元素都在13前面,复杂度为log(n)
cout<< *i <<endl;//输出13,迭代器指向第一个13
i=st.upper_bound(8)//返回最靠前的迭代器it使左闭右开的区间[it,end())中的元素都在8后面,复杂度为log(n)
cout<< *i <<endl;//输出12,迭代器指向第二个8后面的12
st.erase(i);//删除迭代器i指向的元素,12
for(i=st.begin();i!=st.end();++i)
	cout<< *i << ",";//输出1,7,8,8,13,13,14,19,21,22,
	return 0;
}
  1. 自定义规则用法
#include <iostream>
#include <cstring>
#include <set>
using namespace std ;
struct Rule1 {
   
	bool operator()(const int & a,const int & b)const
	{
   return (a
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值