《STL详解》笔记

  1 #include <iostream>
  2 #include <string>
  3 #include <cstring>
  4 #include <cmath>
  5 #include <algorithm>
  6 #include <cstdio>
  7 #include <queue>
  8 #include <stack>
  9 #include <iomanip>
 10 #include <vector>
 11 #include <set>
 12 #include <map>
 13 #include <deque>
 14 #include <list>
 15 #include <bitset>
 16 
 17 using namespace std;
 18 
 19 typedef long long ll;
 20 const int MAXN = 1000005;
 21 const int INF = 0x3f3f3f3f;
 22 const int MOD = 1e9 + 7;
 23 
 24 /*
 25 v.insert(v.begin(), num);//增加
 26 v.erase(v.begin(), v.end()); //擦除
 27 v.erase(v.begin());
 28 reverse(v.begin(), v.end()); //反向排序(从大到小)
 29 sort(v.begin(), v.end(), comp);
 30 -----------------------------------------------------------
 31 string::iterator it = s.begin();
 32 s.insert(it, c);
 33 s.replace(pos, pos, c);
 34 s.find(c);
 35 reverse(s.begin(), s.end());
 36 
 37 char str[10]'
 38 sscanf("bad", "%s", str);
 39 -----------------------------------------------------------
 40 set 集合容器
 41 红黑树:左跟右(不允许重复的键值)
 42 set<int> s;
 43 s.insert(num);
 44 set<int>::iterator it;
 45 中序遍历
 46 for(it = s.begin();it != s.end();++it)
 47     cout << *it << " ";
 48 反向遍历
 49 set<int>::reverse_iterator rit;
 50 for(rit = s.rbegin();rit != s.rend();++rit)
 51     cout << *rit << " ";
 52 找到就返回该键值的迭代器位置,否则返回end()
 53 it = s.find(num);
 54 自定义比较函数,要求按键值由大到小的顺序
 55 1、元素不是结构体
 56 struct myComp
 57 {
 58     bool operator()(const int &a, const int &b)
 59     {
 60         return a > b;
 61     }
 62 };
 63 set<int, myComp>::iterator it;
 64 for(it = s.begin();it != s.end();++it)
 65     cout << *it << " ";
 66 2、元素是结构体,把比较函数写在结构体内
 67 struct Info
 68 {
 69     string name;
 70     float score;
 71     //重载' < '操作符,自定义排序规则
 72     bool operator < (const Info &a) const
 73     {
 74         return a.score < score;
 75     }
 76 };
 77 set<Info>::iterator it;
 78 for(it = s.begin();it != s.end();++it)
 79     cout << (*it).name << ":" << (*it).score << endl;
 80 ---------------------------------------------------------------
 81 multiset 多重集合容器
 82 删除值为c的所有重复元素,返回删除元素总数
 83 ms.erase(c);
 84 返回第一个元素重复元素的迭代器位置,没有就返回end()迭代器位置
 85 ms.find(c);
 86 ---------------------------------------------------------------
 87 map 映照容器
 88 红黑树,键值不重复,比较函数只比较键值
 89 键值重复输入会被覆盖
 90 使用与set集合容器类似
 91 map<int, char>::iterator it;
 92 map<int, char> m;
 93 cout << m.first << m.second << endl;
 94 
 95 $$该自定义比较测试失败$$
 96 struct myComp
 97 {
 98     bool operator ()(const int &a, const int &b)
 99     {
100         if(a != b)
101             return a > b;
102         else
103             return a > b;
104     }
105 };
106 map<int, char, myComp>::iterator it;
107 $$$$$$$$$$$$$$$$$$$$$$$$
108 
109 struct Info
110 {
111     string name;
112     float score;
113     bool operator < (const Info & a) const
114     {
115         return a.score < score;
116     }
117 };
118 map<Info, int>::iterator it;
119 应用:
120 用 map 实现数字分离
121 for(int j = 0;j < 10;++j)
122     m['0' + j] = j;
123 数字映照字符
124 for(int j = 0;j < 10;++j)
125     m[j] = '0' + j;
126 --------------------------------------------------------------
127 multimap 多重映照容器
128 插入元素需要使用 insert()
129 pair()将两个数据组合成一个数据, map 中将 key 和 value 放在一起来保存
130 m.insert(pair<string, double>("Jack", 306));
131 删除键值为 "Jack" 的元素
132 m.erase("Jack");
133 查找元素
134 m.find("Jack");
135 ------------------------------------------------------------------
136 deque 双端队列容器
137 deque 采用分块的线性存储结构存储数据,所有 deque 块用一个 map 块进行管理
138 以数组方式输出元素
139 d.pop_front();
140 d.pop_back();
141 ------------------------------------------------------------------
142 list 双向链表容器
143 迭代器只能用“++”或“--”的操作移动
144 插入新元素时,链表自动扩张
145 l.push_back();
146 l.push_front();
147 删除所有等于 1 的元素
148 l.remove(1);
149 l.pop_front();
150 l.pop_back();
151 l.erase();
152 l.find(l.begin(), l.end(), 5);
153 排序
154 l.sort();
155 剔除连续重复元素
156 l.unique();
157 -----------------------------------------------------------------
158 bitset 位集合容器
159 bitset 对象的大小一旦定义,就不能修改了
160 bitset<10> b;
161 将所有元素设为1
162 b.set();
163 b.set(pos, 1);
164 将 pos 位设置为 0
165 b.reset(pos);
166 直接向输出流输出所有元素
167 -----------------------------------------------------------------
168 stack 堆栈容器
169 s.push();
170 s.top();
171 s.pop();
172 s.size();
173 s.empty();
174 -----------------------------------------------------------------
175 queue 队列容器
176 queue<int> q;
177 q.push();
178 q.size();
179 q.front();
180 q.back();
181 q.empty();
182 q.front();//队首
183 q.back();//队尾
184 -----------------------------------------------------------------
185 priority_queue 优先队列容器
186 队列中最大元素总是位于队首
187 可以重载 "<" 操作符重新定义比较规则
188 priority_queue<int> pq;
189 pq.push(1);
190 pq.size();
191 pq.empty();
192 pq.top();
193 pq.pop();
194 
195 结构体重载 "<" 操作符
196 struct Info
197 {
198     string name;
199     float score;
200     bool operator < (const Info &a) const
201     {
202         return a.score < score;
203     }
204 };
205 
206 从小到大排
207 struct myComp
208 {
209     bool operator ()(const int &a, const int &b)
210     {
211         return a > b;
212     }
213 };
214 priority_queue<int, vector<int>, myComp> pq;
215 */
216 struct myComp
217 {
218     bool operator ()(const int &a, const int &b)
219     {
220         return a < b;
221     }
222 };
223 
224 int main()
225 {
226     priority_queue<int, vector<int>, myComp> pq;
227     pq.push(1);
228     pq.push(9);
229     pq.push(2);
230     pq.push(30);
231     while(!pq.empty())
232     {
233         cout << pq.top() << " ";
234         pq.pop();
235     }
236     return 0;
237 }

猜你喜欢

转载自www.cnblogs.com/shuizhidao/p/9266891.html
今日推荐