c++ stl set 自定义类 equals 如何保证不重复
问题描述:
我在写作业时遇到一个问题,我自定义了一个类,然后用了一个set,set里放的是我自己写的类的指针。我希望这个set里的类指针能满足如下要求:首先满足类指针所指向类实例的某一类成员不与set中已有类指针所指向的实例的对应成员相同,其次类指针本身的内容不同。 我该如何实现?我所知道的自定义compare方法似乎是提供两个放进去的东西的先后顺序关系的比较,如何实现用自己定义的方法实现set内成员满足我所定义的不重复?然后我知道好像Java里可以通过重写equals函数,c++行吗?
答
你如果set里面放的是指针的话是不行的.set默认升序的,它会去比较指针地址然后进行放置.你还是重新考虑一下set里面元素种类吧,建议重新设计.
答
compare的作用就是用来比较和排除相同的,你就直接在compare里面用你需要满足的条件来进行比较。自己定义一个比较大小结果就可以了
答
就是在set添加成员的时候增加一个判断吧,判断是不是跟set原有成员重复
答
首先感谢大家的回答,我最后是通过放类实例而不是指针以及在自己要放入容器的类里面重载了operator<操作符,写了一个compare来实现的,具体参考了以下两个网页:
http://blog.csdn.net/liyonn8744/article/details/8480662
http://en.cppreference.com/w/cpp/container/set
其中在cppreference里告诉了我是如何通过一个谓词为less的compare函数来判断是否重复的,答案其实很简单:!comp(a, b) && !comp(b, a)