C++标准库 (2)

常见用途:建立字符串与整数之间的映射;判断大整数或其它类型数据是否存在的题目,可以把map当bool数组用;

void showmap(map<string,int> v){ for(map<string,int>::iterator it=v.begin();it!=v.end();it++) cout<<it->first<<" "<<it->second<<endl; //first表示key,second表示value cout<<endl; } int main() { map<string,int> m1; //第一个参数是key,第二个参数是value m1["jojo"]=100; m1["kiki"]=99; //会以键从小到大的顺序自动排序 cout<<m1["jojo"]<<endl; cout<<m1.count("wenny"); //判断是否存在key,返回1或0 cout<<m1["test"]<<endl; //不存在key,则显示0,但会插入到map中 showmap(m1); m1.erase("kiki"); //通过关键字删除元素,时间复杂度O(logn);直接删除迭代器时间复杂度O(1) showmap(m1); m1.insert(pair<string,int>("harr",89)); //增加元素 showmap(m1); m1.clear(); //清空元素 m1.find(b); //确定map中是否有string对象b的映射,若没有函数返回m1.end();时间复杂度O(logn) return 0; } queue

翻译为队列,实现先进先出

常见用途:实现广度优先搜索

queue<int> q1; q1.front(); //因为是限制性数据结构,只能通过front()来访问队首元素,back()来访问队尾元素 q1.back(); q1.push(1); q1.pop(); q1.empty(); q1.size(); priority_queue

优先队列,底层用堆实现;队首元素一定是优先级最高的那个

常见用途:贪心问题;对dijkstra算法进行优化

priority_queue<int,vector<int>,greater<int>> q; //从大到小排序,数字越小优先级越大 priority_queue<int,vector<int>,less<int>> q2; //从小到大排序,数字越大优先级越大;默认 q.push(3); //入队,时间复杂度O(logn) q.push(2); q.push(4); cout<<q.top(); //获得队首元素,即堆顶元素 q.pop(); //出队,时间复杂度O(logn) cout<<q.top(); cout<<q.empty(); struct fru{ string name; int price; bool operator < (const fru &b) const{ return price>b.price; } }; priority_queue<fru> q3; //按照重载的运算符<排序 fru f1,f2,f3; f1.name = "peach"; f1.price = 3; f2.name = "apple"; f2.price = 1; q3.push(f1); q3.push(f2); cout<<endl<<q3.top().name<<" "<<q3.top().price; struct cmp{ bool operator () (const fru &a,const fru &b){ return a.price>b.price; } }; priority_queue<fru,vector<fru>,cmp> q4; //重写排序规则 q4.push(f1); q4.push(f2); cout<<endl<<q4.top().name<<" "<<q4.top().price; stack

栈,后进先出

常见用途:模拟实现一些递归

stack<int> s; s.push(1); //入栈,时间复杂度O(1) s.push(2); s.push(3); s.pop(); //出栈,时间复杂度O(1) cout<<s.top()<<endl; //获得栈顶元素,时间复杂度O(1) cout<<s.empty()<<endl; cout<<s.size()<<endl; pair

可以看作一个内部有两个元素的结构体

常见用途:用来代替二元结构及其构造函数,节省编码时间;作为map的键值对进行插入

struct pair{ typename first; typename second; }; pair<string,int> p; p.first = "haha"; p.second = 5; p = make_pair("xixi",55); //临时构建一个pair p = pair<string,int>("heihei",555); //临时构建一个pair cout<<(p1>=p2); //可以直接使用比较操作数 algorithm下的常用函数 int x=-1,y=2; double a=0.1,b=0.2; max(x,y); //参数只能是两个 min(a,b); abs(x); //x必须是整数 swap(x,y); //交换x和y的值 int c[3]={1,2,3}; reverse(c,c+3); //将数组指针在[it,it2)之间的元素或容器的迭代器在[it,it2)范围内的元素进行反转 int d[10]={1,2,3}; do{ cout<<a[0]<<a[1]<<a[2]<<endl; }while(next_permutation(d,d+3)); //函数给出一个序列在全排列中的下一个序列,到达全排列最后一个时会返回false fill(d,d+2,5); //把数组或容器的[it,it2)赋为某个相同的值 sort(d,d+3); //默认递增排序 //用在有序数组或容器中;时间复杂度O(log(last-first));返回位置的指针或迭代器 lower_bound(d,d+3,2); //寻找第一个大于等于val的元素位置 upper_bound(d,d+3,2); //寻找第一个大于val的元素位置

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzgsf.html