1.map也具有唯一性
2.set不要用结构体作为元素类型,除非重载了该结构体的相关函数
3.map键类型不要用自定义结构体,但值可以用
4.map没法做集合运算,做集合运算还得用set
5.set,map可以用CString也可以用string,为了用起来方便,而且因为string的xtree问题,干嘛不用CString
6.集合运算时插入到新的集合中
7.vector的find是使用算法函数;map/set的find是成员函数
8.只有vector迭代器支持算术运算,set/map只支持++/--
9.vector没有insert函数
10.排序函数sort是算法函数,用法是 sort(vecFir.begin(),vecFir.end()); 而不是vecFir.sort();
11.set不支持sort排序
12.vector支持sort排序
13.string = iter->first....map支持这种赋值
14.erase的参数是iterator
15.vector清除重复元素可以结合unique,erase来实现.如下(可参阅c++primer P346页)
/* unique并非删除了元素,只是把重复的摘出来放到了后面 */
vector
/* 从存放重复元素处清除 */
vecFir.erase(iterUnqFir,vecFir.end());
16.set_difference等求集合的算法同样适合于vector
17.vector在使用set_difference等集合运算时,最好先用sort排序,可以提高效率
18.切记,如果有重复元素(vector),则set_difference仅删除一个.举例来说,vector A 含有两个"中国",vector B含有一个"中国",那么他俩求差集时,A仅删除一个中国.而我们的本意是让A删除所有的中国.解决办法是,在set_difference之前,用15条描述的把A做一下重复元素的清除.
19.对string元素,可以直接用iter->c_str();
20.由于map具备唯一性,在使用insert时,如果键已存在,则是不会插入的,换句话说,insert改变不了键值.但是,使用下标则会覆盖原来的值。
21. map本身会按键值自动排序,但是对字母是不忽略大小写的,而且map不支持sort.map的设计来自于平衡二叉树,因此其节点顺序一旦构成,是不允许改变的.如果非要按自己的顺序输出map,则可以借助于vector对键排序,然后按vector顺序输出,每个键对应的值到map中去查找.
22.set_difference可以混合比较vector和set
23. 如果用vector使用set_diffrence的时候,需要考虑元素的重复,比如vec1和vec2中分别有一个a, 则两者用set_difference是没有不同之处的,但如果vec1里面有两个a,此时用set_difference得到的结果就是有一个a,也就是vec1比vec2多出来的a
24.切记切记,set_diffrence之前,一定要将数据结构排序,或者其本来就是有序的,否则得出的结果是不正确的
25.vector也可以用下标访问,但是不能对尚不存在的元素直接赋值
26.map,multimap中现存的key,是不允许修改的。比如iter->first = 2,这是禁止的。
27.在对map,multimap遍历的时候,insert或erase都会造成陷入死循环
28.map,multimap的insert(beg,end)这种方式,vc不支持
29.template
class NoCmp
{
bool operator() (const T& t1, const T& t2)
{
return true;
}
};
map
30.sort算法不能用于list,list有成员函数sort,其中带参的实现接收一个谓词函数(注意:仅仅是谓词函数,不支持函数对象),而且只能在VS2010中支持,VC6不支持。