-
STL的两种不同结构的管理式容器:树形结构和哈希结构。
-
序列式容器:底层是线性序列的数据结构,里面存储的是数据本身。
如:vector, list, deque, stack ,queue…
关联式容器:里面存储<key,valur>的键值对,在数据检索时效率更高。
如:set, map… -
set的三种遍历方式:范围for,auto,迭代器iterator。
int array[9] = { 6, 1, 4, 3, 9, 1, 3, 2, 1 };
set<int> s(array,array+sizeof(array)/array(int));
//用数组对set进行初始化。
for(auto it = s.begin();it != s.end();it++)
cout << *it << " ";
cout << endl;
for(auto&e : s){
cout << e << " ";}
cout << endl;
std :: set<int> :: iterator it = s.begin();
while(it != s.end()){
cout << *it << " ";
it++;}
cout << endl;
- set的增,删,查。
set<int> s1;
s1.insert(6);
s1.insert(1);
s1.insert(4);
s1.insert(3);
s1.insert(9);
s1.insert(1);
s1.insert(2);
s1.insert(1);
for(auto&e : s1){
cout << e << " ";}
cout << endl;
s1.erase(1);
for(auto&e : s1){
cout << e << " ";}
cout << endl;
int ret = s1.find(9);
if(ret != s1.end())
s1.erase(ret);
for(auto&e : s1){
cout << e << " ";}
cout << endl;
- map的初始化,插入:
map<string, string> m1{
{ "C", "小红" },
{ "D", "小黑" }
};
map<string, string> m;
m.insert(pair<string, string>("A", "小花"));
m.insert(make_pair("B", "小亮"));
m["E"] = "小蓝";
利用map统计次数:
int str[] = { 1, 2, 2, 5, 6, 7, 5, 1 };
map<int, int> countmap;
for (const auto&e : str)
{
std::map<int, int>::iterator it = countmap.find(e);
if (it != countmap.end())
(it->second)++;
else
countmap.insert(make_pair(e, 1));
}
cout << countmap[5] << endl;
- set,multiset,map,multimap的区别:
set | multiset | map | multimap | |
---|---|---|---|---|
元素的储存 | <value,value> | <value,value> | <key,value> | <key,value> |
是否去重 | 是 | 否 | 是 | 否 |
是否有序 | 有序 | 有序 | 有序 | 有序 |
排序标准 | 弱排序 | 弱排序 | Key小于 | Key小于 |
是否允许修改 | 否 | 否 | 否 | 否 |
底层原理 | 红黑树 | 红黑树 | 红黑树 | 红黑树 |
是否支持operator[] | 否 | 否 | 是 | 否 |
元素查找效率 | 时间复杂度O(logN) | 时间复杂度O(logN) | 时间复杂度O(logN) | 时间复杂度O(logN) |
所以,multiset可用来对元素进行排序;
map支持下标访问符,在[ ]中放入key值,会找到相应的value值;
map的内部是根据key值进行比较的;
map中的key是唯一的,multimap中的key是可以重复的。