user-0 提问: 如何快速求两个集合的交集，并集和差集

回复:
user: user-1
content: [code=java][/code]

user: user-0
content: 赵4老师，回答大多是复制来的吧- =

user: user-2
content: 引用 7 楼 mujiok2003 的回复:[quote=引用 3 楼 my3439955 的回复:] set_union 并集 set_difference 差集 set_intersection 交集 set_symmetric_difference 对称差集  都在#include <algorithm>  ++[/quote]+++

user: user-3
content: 引用 3 楼 my3439955 的回复:set_union 并集 set_difference 差集 set_intersection 交集 set_symmetric_difference 对称差集  都在#include <algorithm>  ++

user: user-4
content: 仅供参考： #include <algorithm> #include <iostream> #include <functional> #include <cstring> using namespace std; int main() {     char *Alphabet = "abcdefghijklmnopqrstuvwxyz" ;     char *Vowels   = "aeiou" ;     char *AlphaNum = "0123456789abcdef" ;     char result[45] ;     char *last ;      int lenA  = strlen(Alphabet) ;     int lenV  = strlen(Vowels  ) ;     int lenAN = strlen(AlphaNum) ;      cout << "Alphabet = " << Alphabet << endl ;     cout << "Vowels   = " << Vowels   << endl ;     cout << "AlphaNum = " << AlphaNum << endl ;      cout << "\nusing non-predicate versions" << endl ;      //non-predicate set_difference     last = set_difference(Alphabet, Alphabet+lenA,                           AlphaNum, AlphaNum+lenAN,                           result) ;     *last = 0 ;     cout << "set_difference(Alphabet, AlphaNum) =  " << result << endl ;      //non-predicate set_intersection     last = set_intersection(Alphabet, Alphabet+lenA,                             AlphaNum, AlphaNum+lenAN,                             result) ;     *last = 0 ;     cout << "set_intersection(Alphabet, AlphaNum) =  " << result << endl ;      //non-predicate set_symmetric_difference     last = set_symmetric_difference(Alphabet, Alphabet+lenA,                                     Vowels  , Vowels  +lenV,                                     result) ;     *last = 0 ;     cout << "set_symmetric_difference(Alphabet, Vowels) =  " << result << endl ;      //non-predicate set_union     last = set_union(Alphabet, Alphabet+lenA,                      AlphaNum, AlphaNum+lenAN,                      result) ;     *last = 0 ;     cout << "set_union(Alphabet, AlphaNum) =  " << result << endl ;      cout << "\nusing predicate versions" << endl ;      //predicate set_difference     last = set_difference(Alphabet, Alphabet+lenA,                           AlphaNum, AlphaNum+lenAN,                           result  , less<char>()) ;     *last = 0 ;     cout << "set_difference(Alphabet, AlphaNum) =  " << result << endl ;      //predicate set_intersection     last = set_intersection(Alphabet, Alphabet+lenA,                             AlphaNum, AlphaNum+lenAN,                             result  , less<char>()) ;     *last = 0 ;     cout << "set_intersection(Alphabet, AlphaNum) =  " << result << endl ;      //predicate set_symmetric_difference     last = set_symmetric_difference(Alphabet, Alphabet+lenA,                                     Vowels  , Vowels  +lenV,                                     result  , less<char>()) ;     *last = 0 ;     cout << "set_symmetric_difference(Alphabet, Vowels) =  " << result << endl ;      //predicate set_union     last = set_union(Alphabet, Alphabet+lenA,                      AlphaNum, AlphaNum+lenAN,                      result  , less<char>()) ;     *last = 0 ;     cout << "set_union(Alphabet, AlphaNum) =  " << result << endl ;      return 0 ; }

user: user-5
content: set_union 并集 set_difference 差集 set_intersection 交集 set_symmetric_difference 对称差集  都在#include <algorithm>

user: user-6
content: 数组很不方便？？

user: user-7
content: 引用 5 楼 Zzy_ZhangZeyu_ 的回复:[quote=引用 1 楼 Idle_ 的回复:] 主要看你两个集合中具体的数据类型是什么了，位串一般常用于集合中数据类型是bool型，那么每个bit对应一个bool变量，处理交并差集只能处理两个集合拥有同样意义的相同位置元素时。 如果是其它类型的，处理交并差集时主要是先排序原始集合然后同时遍历，根据元素数值的比较决定是否出现在最终结果集合中。 一个bool变量是只占一位吗？还是一个字节？[/quote]  这个随便你怎么定义这个集合了，你可以定义成一个bool占用1bit，也可以定义成一个bool类型元素占用1字节，也可以定义成int，long, int64, customBool1024....

user: user-0
content: 引用 1 楼 Idle_ 的回复:主要看你两个集合中具体的数据类型是什么了，位串一般常用于集合中数据类型是bool型，那么每个bit对应一个bool变量，处理交并差集只能处理两个集合拥有同样意义的相同位置元素时。 如果是其它类型的，处理交并差集时主要是先排序原始集合然后同时遍历，根据元素数值的比较决定是否出现在最终结果集合中。 一个bool变量是只占一位吗？还是一个字节？

user: user-7
content: 主要看你两个集合中具体的数据类型是什么了，位串一般常用于集合中数据类型是bool型，那么每个bit对应一个bool变量，处理交并差集只能处理两个集合拥有同样意义的相同位置元素时。 如果是其它类型的，处理交并差集时主要是先排序原始集合然后同时遍历，根据元素数值的比较决定是否出现在最终结果集合中。