map set vector list

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<string>::iterator iterUnqFir = unique(vecFir.begin(),vecFir.end());

   /* 从存放重复元素处清除 */
    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<typename T>
class NoCmp
{
    bool operator() (const T& t1, const T& t2)
    {
        return true;
    }
};

map<CString,COLORREF,NoCmp<CString>> mm;// VC6不支持此种定义,VS2010可以

30.sort算法不能用于list,list有成员函数sort,其中带参的实现接收一个谓词函数(注意:仅仅是谓词函数,不支持函数对象),而且只能在VS2010中支持,VC6不支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值