当前位置: 首页 > 科技观察

CPP做算法题时常用的容器技巧_0

时间:2023-03-15 21:45:01 科技观察

整理了CPP做算法题时常用的容器技巧。遇到一门新的语言,我会首先思考如何实现从属功能。关于该算法的注释在GitHub[1]上。定长数组、变长数组、向量哈希表、有序字典、优先队列、优先队列、重载排序、排序、返回索引、定长数组要求:声明和取数组intdx[4]={0,1,0,-1};inta[N];dx[0];变长数组的要求:取值:取头,取尾,取索引,头尾相加vectorans(n);//初始长度n,默认值为0//值:取头,取尾,取索引ans.front();ans.back();ans[i]+=1;//append//为什么std::vector不支持push_front?-MiloYip的回答-知乎//https://www.zhihu.com/question/51555037/answer/126373709ans.push_back(5);//O(1)//去掉尾巴ans.pop_back();hash表要求:键值已存在有序字典mapS;//键值已存在if(S.count(5))//S[5]已定义else//S[5]未定义定义有序字典map有序,基于红黑树unordered_map无序,基于映射,效率可能会更高priority_queueheap;//改成小根堆priority_queue,greater>min_heap;//空标尺看子弹heap.empty();heap.size();heap.top();heap.push(5);heap.pop();优先队列重载//重载比较函数structcmp{templatebooloperator()(Tconst&left,Uconst&right){if(left.secondmp;mp[3]=4;mp[2]=44;mp[12]=432;//重新加载存储对象pairpriority_queue,vector>,cmp>pq(mp.begin(),mp.end());//完成pq的初始化}//版权声明:本文为CSDN博主“leagalhigh”原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处转载链接及此声明//原文链接:https://blog.csdn.net/u014257954/article/details/78623215排序要求:重载排序规则排序返回索引vectorans;sort(ans.begin(),ans.end());//默认从小到大vector>res;sort(res.begin(),res.begin());//默认比较第一个元素排序并返回索引向量data={5,16,4,7};vectorindex(data.size(),0);for(inti=0;i!=index.size();i++){index[i]=i;}sort(index.begin(),index.end(),[&](constint&a,constint&b){return(data[a]