c++ - 减去两个对象的无序 std::vector

标签 c++ c++11 vector

我有两个对象 vector 。像这样的东西:

std::vector<thing> all_things;
std::vector<thing> bad_things;

我想获得包含good_things 的第三个 vector 。换句话说,all_thing 中不属于 bad_things 的每个对象:

std::vector<thing> good_things=subtract(all_things,bad_things);

关于如何以最有效和标准的方式实现减法的任何想法。

P.S vector 可以NOT 排序,因为类thing 没有任何可以排序的东西。 谢谢!

编辑: 而且我不想对 all_things 进行任何更改。 例如

void substract(const std::vector<thing>& a, const std::vector<thing>& b);

最佳答案

从评论中,您的thing可以对 s 进行排序,但排序方式毫无意义。

没关系。

对它们进行无意义的排序。

写一个接受两个 thing 的函数s 并给它们一个无意义的一致顺序,并且两个事物只有在相等时才会相互比较。

称之为 bool arb_order_thing(thing const&, thing const&) .

现在std::sort两个 vector 并使用 std::set_difference .

现在,如果复制的东西很昂贵,这可能会很昂贵。因此,改为创建两个 vector thing const* , 写 bool arb_order_thing_ptr(thing const*, thing const*) (使用无意义的顺序取消引用和比较),使用它对指针 vector 进行排序,使用它使用 set_difference,然后转换回 vector<thing> .

或者,考虑写一个 thing const*散列器(不是 std::hash<thing*> ,因为它是全局的且粗鲁的)并使用 unordered_set<thing const*>让我们手动完成这项工作。散列两个 vector 中较小的一个,然后执行 std::copy_if针对另一个 vector 上的哈希进行测试。

关于c++ - 减去两个对象的无序 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32885779/

相关文章:

C++ 数组初始化

xcode - MEX 编译错误 : unknown type name 'char16_t'

c++ - “BackgroundSubtractorMOG”不是 ‘cv’ 的成员

c++ - std::sort 使用函数作为比较器,不起作用?

c++ - 更改模板返回类型似乎对重载决议有影响

matlab - 如何将向量转换为矩阵,其中列上的值为 1,其中列号是向量元素,否则为 0?

r - 按特定(自定义)顺序对整数向量进行排序

c++ - 初始化 vector 的 vector (外部 vector 和内部 vector )

c++ - 具有继承的构造函数定义

c++ - 使用预处理器打印 C++ 类中的默认函数