1. map
map 不能存 key 重复的数据,要么不生效,要么覆盖
map 会对 key 排序,二叉数算法
1.1. 添加数据:
map1.insert(pair<int,string>(01,"01"));
// 重复添加不会覆盖值
map1.insert(make_pair(02,"02"));
// 重复添加不会覆盖值
map1.insert(map<int,string>::value_type(03,"03"));
// 重复添加不会覆盖值
map1[04] = "04"
// 重复添加会覆盖
1 | map<int,string> map1; |
1.2.判断是否添加成功:
1 | pair<map<int,string>::iterator,bool> p = map1.insert(make_pair(06,"06")); |
1.3.循环:
1 | // 循环迭代器 |
1.4.删除:
auto
:可以推到出类型
1 | int main() |
1.5查找:
1 | map<int,string>::iterator find_it = map1.find(0); // 0指的是key |
2. multimap
multimap 可存 key 重复的数据
, 基本操作与 map
类似multimap
是没有排序的
遍历和分组查询:
1 | // 遍历 |
3. 容器存对象
java
和 c++
的区别:
java: java
中把对象添加到了集合,这个对象发送了改变,集合中的对象也会发生改变,他们是同一块地址
c++:中会调用对象的拷贝构造函数,存进去的是另一个对象
c++ 中容器中存对象需要注意的点:
- 没有默认的构造函数
- 析构函数也可能回调多次,如果说在析构函数中释放内存,需要在拷贝构造函数中进行深拷贝
1 | int main(){ |
4. 函数对象
1 | class Compare{ |
5. 一元谓词
定义:重载()
,并且需要传递1
个参数,常返回int值用于计数
printObj = for_each(set1.begin(),set1.end(),printObj);
:最后一个参数传一元函数对象
1 | void print(int number){ |
6. 二元谓词
定义:重载()
,并且需要传递2
个参数,常返回bool值用于算法判断条件
1 | class CompareObj{ |