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 }
《STL详解》笔记
猜你喜欢
转载自www.cnblogs.com/shuizhidao/p/9266891.html
今日推荐
周排行