【问题标题】:A generic set operations class i.e. intersection, union, minus etc通用集合操作类,即交集、联合、减号等
【发布时间】:2011-09-11 16:11:54
【问题描述】:

我想编写一个 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++ 还是很陌生,所以我现有函数上的任何 cmets 都会受到赞赏。

非常感谢。

【问题讨论】:

    标签: c++ c set-operations


    【解决方案1】:

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

    • set_union
    • set_difference
    • set_intersection
    • set_symmetric_difference

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

    见:http://www.cplusplus.com/reference/algorithm/

    【讨论】:

      【解决方案2】:

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

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

      所有插入的引用类型 进入 STL/CLR 容器必须有,在 至少,以下要素:

      一个公共拷贝构造函数。

      一个公共赋值运算符。

      一个公共析构函数。

      此外,关联容器 比如 set 和 map 必须有一个 public 比较运算符定义,即 运算符

      像引用类型、值类型和 引用类型的句柄 插入关联词中 容器必须有比较 运算符,例如 operator

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-18
        • 2014-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-17
        相关资源
        最近更新 更多