find方法in algorithm和stl vector同时使用

        刚用stl,很久之前学过的,但是很久没用了,最近做项目需要,随便写测试程序的时候发现不看确实不行。

 

一个类型的对象能被放入容器,且支持容器的各项操作,需要符合下列条件:

对象的构造和拷贝

● 容器的insert、assign 等操作实际上是对一个对象的副本进行操作

● 一个类型的对象能被放入容器、且支持容器的各项操作,需符合下列条件:

● (最好)有默认构造函数

● 必须有复制构造函数

● 必须有T& operator=(const T& other) 形式的赋值操作

 

比较操作 ● 基于RB­Tree的关联容器是有序的,为保证对容器中的元素或key进行排序,容器中的对象或key必须保证 < 可用,或提供合适的cmp比较器 ● 对于部分操作如find,需对比较容器中的元素是否相等,容器中的对象必须保证 == 可用,或结合!cmp(x,y) && !cmp(y,x)

 

由于使用find方法时,并没有实现operator==,所以显然无法比较。

先来看例子程序错误的写法吧:

 

 


在这里TestChild是已经实现好的类,其中的方法实现代码如下:

 

 

通过http://www.cplusplus.com/reference/algorithm/find/中查看find方法的实现:

 

first是指向vector中内容元素的指针,这样*first取出元素后为指针,而按照

上面例子中,查找的元素也为对象指针,所以实际上进行的是指针与指针之间的比较,

这样就不会调用我们实现的operator==方法了。所以正确的做法应该如下:

 

应该使用对象比较而非指针比较。

 

 

注意:

当然在使用map是key,value对中,如果value是自己定义的类对象,那么根据上面的说法,实现拷贝构造,=即可,但是key如果也是类对象,那么至少也要实现< operator吧,这个没测试过 。。。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值