0

我有两个向量对象,分别称为 A 和 B。MyType 类没有字段 ID,我想获取位于 A 但不在 B 中的 MyType*。

由于我没有 ID 需要根据字符串字段进行比较。

我的对象的类看起来像这样

 class Object 
    {
       public:
               Object();
       string      Name;
       bool        Mode;
       string      something;
       Int         range;
    }


    vector<Object*> a; //asssume filled with objects
    vector<Object*> b; //asssume filled with objects
    vector<Object*> ret; 

现在我想获得差异(a,b)- 所有在 a 而不是 b 的成员。

如何进行此操作。我尝试使用strcmp()来进行比较,但它不起作用。

4

3 回答 3

1

将 的所有条目添加b到一个集合中。然后尝试将 的所有条目添加a到该集合中 - 每个成功的条目都是 ina但不在 in的条目b

如果是Name您要比较的条目,而不是指针,请使用 aset<string>并将Name条目添加到集合中。

于 2012-10-12T09:06:01.713 回答
1

这使用了现有的 STL 算法:

bool compPtrByName(Object *const &p1, Object *const &p2) {
    return p1->Name < p2->Name;
}

然后打电话

std::sort(a.begin(), a.end(), compPtrByName);
std::sort(b.begin(), b.end(), compPtrByName);
std::set_difference(a.begin(), a.end(), b.begin(), b.end(), ret.begin(), compPtrByName);

如果不允许重新排序向量,则先复制它们。

注意:这给出了集合差 A - B。对于对称差 (A - B) 并集 (B - A),请使用std::set_symmetric_difference

于 2013-03-01T05:26:30.190 回答
-1

This seems like a perfect job for set_difference ( http://www.cplusplus.com/reference/algorithm/set_difference/ ).

Provide a comparator for your objects, sort the two vectors (using that comparator), and then use set_difference (using that same comparator) to get the objects that are in the first, but not the second.

于 2012-10-12T09:55:33.270 回答