C++如何通过比较set里的指针的内容来比较set

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++如何通过比较set里的指针的内容来比较set相关的知识,希望对你有一定的参考价值。

set里存放的是指向Item的指针,现在有一个vector<set<Item*>>,需要比较set,其中需要的是set里的Item 的比较(如果直接比较,则比较的是Item的指针,而不是Item),已经定义了比较Item指针的类,但是现在需要的是比较set,以求在vector里查找set成功。这样应该怎样定义set的比较函数呢?
ps:Item的比较如下:

class LRItemLess : public std::binary_function<LRItem, LRItem, bool>/
public:
bool operator () (LRItem* lhs, LRItem* rhs) const
return lhs->getLeft() < rhs->getLeft();

;

item 指针相同就说明item相同的,所以不需要比较item值,只要比较指针就可以了
bool flag=false;

iterator v=vector.beign()
while(v!=vector.end())

iterator iv=v.bigen()iterator is=set.begin()
while(iv!=v.end())if(iv!=is),break;iv++;is++
if(iv==v.end())flag=true,break;

if(flag)
found;

else
notfound;

大概就是遍历一遍vector ;来查找

建议vector 里存放 set指针,这样就不需要比较set内部的值是否相同了
vector<*set<*item>>,写成这样就可以直接比较vector 的内容和set是否相等了

Set *set;
for(set*v:vector)
if(set==v)
flag=true,break;
if(flag==true)
found;
else
not found;
参考技术A 你这是想干嘛。。问题不清晰啊

set集合关于set与set进行比较

containsAll方法用来判断Set集合是否包含另一个集合中的全部内容。

语法  boolean containsAll(Collection<?> c) 

返回值:如果Set集合包含参数c指定的集合对象中的所有内容,则返回true;否则返回false。

参数:c是要判断的另一个集合对象。

示例  本示例首先创建Set集合,并添加一些对象,然后创建和Set集合部分内容相同的List集合,调用containsAll方法判断Set集合是否包含List集合的内容。

public static void main(String[] args) {

    Set set = new HashSet();
    set.add(new Date());   //向列表中添加数据

    set.add("apple");    //向列表中添加数据

    set.add(new Socket());   //向列表中添加数据

    set.add("TV");     //向列表中添加数据

    List list=new ArrayList();

    list.add("apple");    //向列表中添加数据

    list.add("TV");    //向列表中添加数据

    boolean contains = set.containsAll(list);

    if (contains) {

   System.out.println("Set集合包含List集合的内容");

    } else {

   System.out.println("Set集合不包含List集合的内容");

    }

}

以上是关于C++如何通过比较set里的指针的内容来比较set的主要内容,如果未能解决你的问题,请参考以下文章

实体类只能通过手工set来赋值么?

Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还 是 equals()?它们有何区别?

[转]Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还 是 equals()?它们有何区别?

如何在 C++ std::set 中放置看起来不可比较的对象?

c++ stl set 中find方法是如何实现的

c++ set 比较函数