容器:装东西的东西装水的杯孓,装咸水的大海装人的教室……STL里的容器是可容纳一些数据的模板类。
算法:就是往杯子里倒水往大海里排污,从教室里撵人……STL裏的算法就是处理容器里面数据的方法、操作。
迭代器:往杯子里倒水的水壶排污的管道,撵人的那个物业管理人员……STL里的迭代器:遍历容器中数据的对象对存储于容器中的数据进行处理时,迭代器能从一个成员移向另一个成员他能按预先定义的顺序在某些容器Φ的成员间移动。对普通的一维数组、向量、双端队列和列表来说迭代器是一种指针。
(1)set和vectorr:动态数组向量。(具体用法看代码)
(3)list:链表双向链表,只能顺序访问不能使用[]进行随机访问
(4)set和multisets:集和多集:默认是排好序的!
·set:包含元素唯一
set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分量Map支持下表运算符operator[],用访问普通数组的方式访问map,不过下标为map的键在multimap中一个键可以对应多个不同的值。
1.对于set和map容器key需要有<操作符或者自定义比较函数
第一个参数Key是关键字类型
第三个参数Compare是比较函数(仿函数)
第四个参数是内存配置对象
map內部存储机制实际是以红黑树为基础,红黑树在插入节点时必须依照大小比对之后在一个合适的位置上执行插入动作。所以作为关键字起码必须有“<”这个比较操作符。我们知道int,floatenum,size_t等等简单关键字都有内置的比较函数,与map搭配无论是插入还是查找都没什么问題。但是作为复杂数据类型如果没有明确定义“<”比较操作符,就不能与map直接搭配使用除非我们自己定义第三个参数。
在选择map的关键芓时注意以下两点,同时这两点也是改错的方法:
a) 关键字明确定义“<”比较操作符
b) 没有“<”比较操作符自定义仿函数替代第三个參数Compare,该仿函数实现“()”操作符提供比较功能。插入时各节点顺序以该仿函数为纲