一个通用的集合运算类,即交集、并集、减号等

A generic set operations class i.e. intersection, union, minus etc

本文关键字:并集 运算 一个 集合      更新时间:2023-10-16

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

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

所以我想要同样的东西,但其中string是说my_data_type,它是各种成员的结构。假设它看起来像这样:

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

每个数据类型的函数也不会像我的set_union(...)函数那样简单,因为在集交集的情况下,我肯定需要测试my_data_type的每个成员的相等性?

此外,我对C++还很陌生,所以对我现有函数的任何评论都将不胜感激。

非常感谢。

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

  • 集合(_U)
  • 设置差异
  • set_intersection
  • 集合对称差

这些都支持一个比较器函数,这样您就可以对所有自己的数据类型进行比较。或者如其他回复中所述,使您的容器符合STL要求。

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

已经有这样的算法(并集、交集、排序…):http://www.cplusplus.com/reference/algorithm/

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

插入的所有引用类型into STL/CLR容器必须具有,位于至少包括以下元素:

公共副本构造函数。

公共分配运算符。

公共析构函数。

此外,关联容器例如set和map必须具有公共定义的比较运算符运算符<默认情况下。一些操作在容器上可能还需要公共默认构造函数和要成为的公共等价运算符定义

类似于引用类型、值类型和指向的引用类型的句柄插入关联容器必须有一个比较诸如运算符<定义对公共副本的要求构造函数,公共赋值运算符和公共析构函数do值类型或句柄不存在引用类型。

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