常用的C++ STL

Posted happy-medge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用的C++ STL相关的知识,希望对你有一定的参考价值。

内容

  1. vector:不定长数组
  2. map:映射
  3. queue:队列
  4. sort:排序
  5. priority_queue:优先队列

vector:不定长数组

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <vector>     //相关头文件
 4 using namespace std;
 5 
 6 int main()
 7     //vector(不定长数组)用法介绍
 8     vector<int> G;     //创建vector
 9     G.push_back(5);    //加入元素5, 类似于栈
10     G.push_back(3);    //加入元素3
11     G.push_back(7);    //加入元素7
12     //这时vector里面有元素: 5, 3, 7
13 
14     //访问
15     int a;
16     a = G[0];   //a被赋值为vector里面的第一个元素,即a = 5
17     a = G[1];   //a被赋值为vector里面的第二个元素,即a = 3
18 
19     //获得vector的大小: G.size()    //这里是遍历vector里面的元素
20     for(int i = 0; i < G.size(); i++)
21         printf("%d\n", G[i]);
22         //这里G.size() == 3, 所以输出G[0], G[1], G[2]
23     
24     printf("\n");
25 
26     //高级用法: vector数组
27     vector<int> g[3];
28     //这里创建了3个vector, 其中分别是g[0], g[1], g[2]
29     g[1].push_back(4);   //向g[1]这个vector加入元素4
30     g[1].push_back(1);   //向g[1]这个vector加入元素1
31 
32     //访问
33     a = g[1][0];   //a被赋值为g[1]里面的第一个元素,即a = 4
34     a = g[1][1];   //a被赋值为g[1]里面的第二个元素,即a = 1
35 
36     for(int i = 0; i < g[1].size(); i++)
37         printf("%d\n", g[1][i]);
38         //这里g[1].size() == 2, 所以输出g[1][0], g[1][1]
39     
40 
41     return 0;
42 

map:映射

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <map>
 4 #include <string>
 5 using namespace std;
 6 
 7 int main()
 8     //map用法介绍
 9     map<string, int> mp;     //创建一个map: 从string到1的映射
10     mp["abc"] = 1;   //建立从字符串"abc"到整数1的映射
11     string s = "efg";   //创建一个string
12     mp[s] = 5;       //建立从字符串"efg"到整数5的映射
13 
14     //访问
15     int a;
16     a = mp["abc"];    //这时mp["abc"]的值为1, 也就是a = 1
17     cout << a << endl;
18     a = mp[s];        //这时mp[s]的值为5, 也就是a = 5
19     cout << a << endl;
20 
21     //使用char数组
22     char s2[5] = "gsd";
23     mp[s2] = 9;       //建立从字符串"gsd"到整数9的映射
24     cout << mp[s2] << endl;
25 
26     //最后注意的是, 虽然map看起来很像hash, 但其内部实现不是hash, 而是一颗树(红黑树)
27     //也就是说, 当进行访问map的操作时, 时间复杂度为O(log m)(m为映射数量), 并不是O(1)
28 
29     return 0;
30 

queue:队列

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <queue>
 4 using namespace std;
 5 
 6 int main()
 7     //queue基本用法
 8     queue<int> q;    //创建一个先进先出的队列(也就是这个队列只能在尾部加入元素, 头部取出元素, 这个是关键)
 9     q.push(1);    //加入元素1
10     q.push(2);    //加入元素2
11     q.push(3);    //加入元素3
12     //这时队列是: 1, 2, 3
13 
14     //访问
15     int a;
16     a = q.front();  //这时q.front()的值为1, 所以a = 1, 注意这里只是读取队列首元素, 并没有弹出元素
17     cout << a << endl;
18     a = q.front();
19     cout << a << endl;
20 
21     //弹出
22     q.pop();    //弹出队列的首元素, 也就是变成2, 3
23     a = q.front();
24     cout << a << endl;
25 
26     //判断队列是否为空
27     q.pop();    //弹出队列的首元素, 也就是变成3
28     q.pop();    //弹出队列的首元素, 此时队列为空
29     if(q.empty()) cout << "Yes\n";      //如果队列为空, 则q.empty()为真, 则输出"Yes"
30     if(q.size() == 0) cout << "Yes\n";  //如果队列大小为0, 则输出"Yes"
31 
32     return 0;
33 

sort:排序

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 using namespace std;
 5 //先从主函数看
 6 
 7 struct node
 8     int first, second;
 9 ;
10 
11 bool cmp1(int x, int y)
12     return x > y;    //从大到小排
13 
14 
15 bool cmp2(int x, int y)
16     return x < y;    //从小到大排
17 
18 
19 bool cmp_node(node x, node y)
20     if(x.first == y.first) return x.second < y.second;
21     else return x.first < y.first;
22     //这里的意思: 优先对结构体的第一个值进行排序, 如果第一个值相等, 就按照第二个值进行排序
23 
24 
25 int main()
26     //sort的用法
27     int a[5] = 5,4,3,2,1;
28     sort(a, a+5);    //默认对数组a进行从小到大排序
29     for(int i = 0; i < 5; i++)
30         cout << a[i] << " ";
31     
32     cout << endl;
33 
34     string s[3] = "bcd", "abc", "a";
35     sort(s, s+3);    //默认对字符串进行字典序排序
36     for(int i = 0; i < 3; i++)
37         cout << s[i] << endl;
38     
39     cout << endl;
40 
41     //自定义比较级(比较函数):
42     sort(a, a+5, cmp1);  //按cmp1的比较级排序, 注意这里cmp1后面不能加()
43     for(int i = 0; i < 5; i++)
44         cout << a[i] << " ";
45     
46     cout << endl;
47 
48     sort(a, a+5, cmp2);   //按cmp2的比较级排序
49     for(int i = 0; i < 5; i++)
50         cout << a[i] << " ";
51     
52     cout << endl;
53 
54     cout << endl;
55     //对结构体进行排序
56     node G[3] = 5,3, 5, 2, 1, 9;
57     sort(G, G+3, cmp_node);   //按照cmp_node进行排序
58     for(int i = 0; i < 3; i++)
59         printf("G[%d]: %d %d\n", i, G[i].first, G[i].second);
60     
61     cout << endl;
62 
63     return 0;
64 

priority_queue:优先队列

 暂更

以上是关于常用的C++ STL的主要内容,如果未能解决你的问题,请参考以下文章

[C++ STL] 常用算法总结

C++ STL 常用算法总结

C++中STL常用算法

常用的C++ STL

C++ STL 之 常用算法

c++ stl常用