通用集合运算类,即交集,并集,减去等

我想编写一个C ++类,它提供的set操作可以处理字符串向量和我自己的数据类型的向量。 有没有简单的方法来做这个而不是为每种数据类型编写不同的函数? 到目前为止,我已经为字符串向量编写了操作 下面显示了我的集合联合的示例:

vector SetOperations::set_union(vector set1, vector set2) { for(std::vector::size_type i = 0; i < set1.size(); i++) { set1.push_back(set2.at(i)); } return set1; } 

所以我想再次使用相同的东西但是stringmy_data_type ,这是各种成员的结构。 让我们说它看起来像这样:

 struct my_data_type { int label; vector x; vector y; string str; }; 

每个数据类型的函数也不会像我的set_union(...)函数那么简单,因为我确实需要在集合交集的情况下测试my_data_type每个成员的my_data_type

另外,我对C ++很陌生,所以对我现有function的任何评论也会受到赞赏。

非常感谢。

已有这样的算法(联合,交集,排序……): http : //www.cplusplus.com/reference/algorithm/

您的元素只需满足STL容器元素的要求(请参阅http://msdn.microsoft.com/fr-fr/library/bb385469.aspx ):

插入到STL / CLR容器中的所有引用类型必须至少具有以下元素:

公共拷贝构造函数。

公共任务运营商。

公共析构函数。

此外,关联容器(如set和map)必须定义一个公共比较运算符,默认情况下为operator <。 对容器的某些操作可能还需要定义公共默认构造函数和公共等价运算符。

与引用类型类似,要插入关联容器的引用类型的值类型和句柄必须具有比较运算符,例如operator

您可以在该WikiBook上找到有关运算符重载(将在您的自定义类中实现)的信息: http : //en.wikibooks.org/wiki/C++_Programming/Operators/Operator_Overloading

其中一些已经存在并且在算法标题中:

  • set_union
  • set_difference
  • set_intersection
  • set_symmetric_difference

这些都支持比较器function,因此您可以对所有自己的数据类型执行此操作。 或者在其他回复中发布,使您的容器符合STL要求。

请参阅: http : //www.cplusplus.com/reference/algorithm/