首页 > 其他分享 >STL

STL

时间:2024-10-31 17:14:04浏览次数:1  
标签:map set 迭代 STL v1 mp include

队列(queue)

  #include<queue>
  queue<int> q;
  q.push(x);//在队尾加入x
  q.pop();//队首元素出队
  q.clear();//清空队列
  q.empty();//判断队列是否为空

优先队列(priority_queue)

  #include<queue>
  priority_queue<int> q;				//默认大根堆
  priority_queue<int,vector<int>,greater<int> > q;	//小根堆
  priority_queue<int,vector<int>,less<int> > q;		//大根堆
  q.top()       //堆顶元素,注意queue是q.front()
  q.pop()      	//删除堆顶元素
  q.push()   	//向堆中加入元素
  q.empty()  	//堆是否为空
  q.size()     	//堆的大小

动态数组(vector)

  #include<vector>
  vector<int> v1;
  v1.push_back()  	//在数组的最后添加一个数据
  v1.pop_back()    	//去掉数组的最后一个数据 
  v1.front()    	//返回第一个元素(栈顶元素)
  v1.begin()      	//得到数组头的指针,用迭代器接受
  v1.end()        	//得到数组的最后一个单元+1的指针,用迭代器接收
  v1.clear()        	//移除容器中所有数据
  v1.empty()         	//判断容器是否为空
  v1.erase(pos)        	//删除pos位置的数据
  v1.erase(beg,end)	//删除[beg,end)区间的数据
  v1.size()      	//回容器中实际数据的个数
  v1.insert(pos,data) 	//在pos处插入数据

栈(stack)

  #include<stack>
  stack<int> st;
  st.push(x);  	// 将x放入栈中
  st.top();     // 获取栈顶元素
  st.pop();    	// 栈顶元素出栈
  st.empty(); 	// 判断栈是否为空

二元组(pair)

#include<algorithm>
pair<int,int> p1;
p1=make_pair(1, 3);
p1.first	//注意没有括号
p1.second

集合(set)

set本质为红黑树,支持一些基础平衡树操作

#include<set>
set<int> S;
set<int>::iterator it;	//注意:set的迭代器只支持it++,it--,赋值,指针调用和判等
				//如果想访问前驱、后继,只能直接移动it,而没有类指针的*(it+1)
        //特别地,当set存pair时,(*it).first要注意括号,或者直接it->first
S.insert(v);
S.erase(it);
S.clear();
S.empty();
S.size();
S.count();
\\以下返回迭代器
S.begin();
S.end();		//注意S.end()不存东西,访问它是非法的
S.find(v);		//找不到返回S.end()
S.lower_bound(v);
S.upper_bound(v);

迭代器使用细则

1、双向迭代器只支持前移,后移,赋值,指针调用和判等

set<int>::iterator it,it2;
++it; --it;
it2=it; (it2==it);

2、set的迭代器,map迭代器的键(it->first)是只读的(set维护区间时容易漏想)

3、检查迭代器是否为最后一个元素时,如果偷懒用(++it)==S.end()一定要记得移回来

set维护信息例题

P5226
$\ $ P1081

键值对(map)

map的本质为红黑树,所有操作都是\(O(logn)\)

map构造键-值对应,对于map<key,value>来说,唯一的要求是key支持<号(用于平衡)

\(\textcolor{red}{*}\)注意:重载<号时一定要比较全部元素

map的判等条件为!(a<b)&&!(b<a),因此如果部分比较,会导致未比较的关键信息被合并,导致错误

这样做可能会导致常数巨大,必要时可以用int替代

map的迭代器(iterator)可以指向两个值,it->first为key,it->second为value

#include<map>
map<key,value> mp;	
map<ket,value>::iterator it;
mp.insert(make_pair(key,value));	//插入,如果此key已存在则插入失败
mp[key]=value;				//赋值,可覆盖
mp.erase(value);
mp.count(key);				//map中只有0/1
mp.clear();
mp.size();
//以下皆返回迭代器
mp.begin();
mp.end();
mp.find(value);
mp.lower_bound();			//待解决
mp.upper_bound();			//待解决

二分查找(lower_bound & upper_bound)

注意以下返回的都是指针

#include<algorithm>
upper_bound(a+1,a+n+1,k)		//第一个大于k的位置
lower_bound(a+1,a+n+1,k)		//第一个大于等于k的位置
bool cmp(int x,int k) {			//自定义规则,注意k是给定参数,不是a[]的元素
	return val[x]<=val[k];
}
lower_bound(a+1,a+n+1,k,cmp)		//第一个不符合cmp的位置
upper_bound(a+1,a+n+1,k,cmp)		//最后一个符合cmp的位置

math.h库

double x;
sin(x)
cos(x)
tan(x)	//弧度制
log(x)	//即ln(x)
exp(x)	//e^x
double PI=acos(-1.0);	//反余弦函数生成π
pow(x,y)	//可用于实数指数的乘方运算

complex库

建议手写

bitset

即01数组,自带常数优化,为\(O(\frac 1 \omega)\)(\(\omega\)取决于系统位数)

支持下标操作,支持位运算,不支持四则运算,用法相当于bool数组+状压中表示\(S\)的int

link

#include<bitset>
bitset<64> bt;
//bitset只支持位运算,不支持四则运算
bt.count()
bt.flip()	//全部反转
bt.to_ulong()	//转成unsigned long
cout<<bt<<endl;	//支持流输出

标签:map,set,迭代,STL,v1,mp,include
From: https://www.cnblogs.com/zhone-lb/p/18518373

相关文章

  • 基于STL的自定义栈与队列实现:灵活选择底层容器的模板设计
    文章目录代码模板设计主要成员函数底层容器的选择模板设计底层容器的选择关于stack的示例代码关于queue的示例代码前言:在本文中,我们将分析一个模拟C++标准模板库(STL)栈的自定义实现以及模仿C++标准模板库(STL)队列的自定义实现。该stack类模板允许在底层容器的选择......
  • STL学习
    手写STL源码模板//TemplateDemo#include<iostream>usingnamespacestd;//交换两个变量voidMySwap(int&a,int&b){ inttemp=a; a=b; b=temp;}//使用模板--自适应类型生成函数,地址不同//函数重载和模板函数冲突,优先调用普通函数,或者使用<T>()显示调用//不......
  • C++ STL queue 的实现
    求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论这篇文章很短,直接给代码:#include<iostream>usingnamespacestd;template<classT>classQueue{protected: structnode......
  • 【C++篇】栈的层叠与队列的流动:在 STL 的韵律中探寻数据结构的优雅之舞
    文章目录C++栈与队列详解:基础与进阶应用前言第一章:栈的介绍与使用1.1栈的介绍1.2栈的使用1.2.1最小栈1.2.2示例与输出1.3栈的模拟实现第二章:队列的介绍与使用2.1队列的介绍2.2队列的使用2.2.1示例与输出2.3队列的模拟实现2.3.1示例与输出第三章:优先队......
  • C++ STL基本用法概述(简洁版)
    vector变长数组,倍增思想基本函数 size()   //返回元素个数,时间复杂度为o(1)empty()   //返回a是否为空,时间复杂度为o(1)clear()   //清空front()/back()   //返回第一个数/最后一个数push_back()   //最后插入一个数pop_back()   //删掉最后一个数......
  • c++ STL标准模板库-算法
    C++StandardTemplateLibrary(STL)算法是一组泛型算法,它们可以在各种容器上操作。这些算法被设计为与容器无关,因此可以在任何提供必要迭代器接口的容器上使用。STL算法分为以下几个主要类别:非修改算法Non-modifyingsequenceoperations:不改变容器内容,主要用于搜索和排序。......
  • Cpp::STL—容器适配器priority_queue的讲解和模拟实现(17)
    文章目录前言一、优先级队列的使用介绍使用一道题目二、仿函数的讲解对内置类型对自定义类型三、模拟实现priority_queue两个仿函数构造函数向上调整和向下调整插入数据和删除数据其他常用接口总概一览总结前言  承接上一篇容器适配器的内容,本篇我们再来学一个......
  • STL-常用容器-vector
    1vector基本概念功能:vector数据结构和数组非常相似,也称为单端数组vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间vector容器的迭代器是支持随机访......
  • JSP & EL表达式 & JSTL -2024/10/20
    JSPJSP(全称:JavaServerPages):Java服务端页面。是一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容,也就是JSP=HTML+Java。导入JSP依赖<dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactI......
  • (STL)容器
    1.容器常用数据结构有数组(array),链表(list),tree(树),栈(stack),队列(queue),集合(set),映射表(map),根据他们排列特性的不同,容器又分为序列式容器和关联式容器,序列式容器:序列容器是按照线性顺序存储元素的容器,常用的有vector,deque,list等在调用vector,deque,list时别忘记包......