今天 昨天(老懒狗了)做题顺便学了下map和pair的使用方法
map表(就像pair的数组)
头文件#include< map>
使用:
创建
map<key,value> mapname;//第一种方法
mapname[key]=value;//这个操作可以覆盖之前同一key的value
map<key,value> mapname={//第二种方法
{key1,value1},
{key2,value2},
...
{keyn,valuen}
}//后面也可以补“mapname[key]=value;”再进行补充。
mapname.insert(map<key, value>::value_type(eg1, eg2)//第三种方法
mapname.insert(pair<t1, t2>(eg1, eg2)
实践
class Solution {//独一无二的出现次数
public:
bool uniqueOccurrences(vector<int>& arr) {
map <int,int> m;
for(int i=0;i<arr.size();i++)
{
map<int,int>::iterator iter=m.find(arr[i]);
if(iter!=m.end())//查找有无此元素,若iter指向末尾,则无
m[arr[i]]=m[arr[i]]+1;//这样可以直接覆盖之前键值对
else
m[arr[i]]=1;//直接添加一个键值对
}
map <int,int> mm;
for(map<int,int>::iterator it=m.begin();it!=m.end();it++)//迭代器it是指针
{
map<int,int>::iterator iter=mm.find((*it).second);
if(mm.count((*it).second)==0)//map中同一键值只能出现一次,所以count不是1就是0
mm[(*it).second]=1;
else
return false;
}
return true;
}
};
//map.count(x)很常用
pair键值对
头文件 #include< utility>
使用:
创建
pair<t1,t2>p1;//创建空对象,对象类型不必一样
p1.first=eg1;
p1.second=eg2;
pair<t1,t2>p2(eg1,eg2);//创建对象
pair<t1,t2>p2;//这两行和上一行效果一样
p2=make_pair(eg1,eg2);
pair<t1,t2>p3;
p3=p1;
pair<t1,t2>p4=p1;//两种赋值方法
queue队列 先进先出
头文件#include< queue>
queue <类型> q;
几个函数:
q.empty() 队列空,则返回1,否则返回0;
q.size()返回q的元素个数;
q.push(x)将x传入q的末尾;
q.pop()弹出第一个元素,无返回值;
q.front()返回首位元素;
q.back()返回末位元素。
根据vector做的stack堆栈 后进先出
#include<vector>
template <typename T> class Stack: public Vector<T>
{
public:
void push(T const & e)
{
insert(size(),e);
}
T pop()//一般的pop是void,没有返回值。
{
return remove(size()-1);
}
T & top()
{
return (*this)[size()-1];
}
bool empty()
{
if(size)
return false;
else
return true;
}
}