2011-06-09 87 views
1

我想编写一个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++很陌生,所以对我现有的函数的任何评论也会被赞赏。

非常感谢。

回答

2

已经有这样的算法(集,交集,分选,...):http://www.cplusplus.com/reference/algorithm/

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

所有将 插入到STL/CLR容器中的参考类型必须至少包含 以下元素:

公共复制构造函数。

公共赋值运算符。

公共析构函数。

此外,关联容器 诸如组和地图必须定义一个公共 比较运算符,这是 操作者<默认。容器上的某些操作 可能还需要公开默认构造函数 以及定义的 公共等价运算符 。

相似的参考类型,值类型和 句柄引用类型是到 被插入到一个关联 容器必须有一个比较 操作者如操作者所定义<。 公开副本的要求 构造函数,公共分配 运算符和公共构造函数 对于值类型不存在或将 处理为引用类型。

您可以找到有关对维基运算符重载(在你的自定义类来实现)信息:http://en.wikibooks.org/wiki/C++_Programming/Operators/Operator_Overloading

5

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

  • set_union
  • set_difference
  • set_intersection
  • set_symmetric_diffe rence

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

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