读书人

STL 中的set_difference求个对象的差集

发布时间: 2013-07-08 14:13:00 作者: rapoo

STL 中的set_difference求个对象的差集,帮忙看看
对STL不太熟悉,看看这个这段代码错在哪里了,或者该怎么写?求会的朋友指点。想用set_difference比较2个对象字符串的差集

list<string> s1;
list<string> s2;
list<string> s3;

s1.push_back(_T("D:\\20130702\\0817"));

s1.push_back(_T("D:\\20130702\\0907"));
s1.push_back(_T("D:\\20130702\\0908"));
s1.push_back(_T("D:\\20130702\\0909"));
s1.push_back(_T("D:\\20130702\\0912"));

//////////////////////////////////////////////////////////////////////////
s2.push_back(_T("D:\\20130702\\0817"));

s2.push_back(_T("D:\\20130702\\0907"));
s2.push_back(_T("D:\\20130702\\0909"));
s2.push_back(_T("D:\\20130702\\0908"));

set_difference(s1.begin(),s1.end(),s2.begin(),s2.end(),s3.begin(),compare());

bool compare(string s1,string s2)
{
if (s1==s2)
{
return true;
}

return false;
}

我不知道上面的compare函数该怎么写,请会的朋友帮忙改正下 STL
[解决办法]
s1.sort();
s2.sort();
set_difference(s1.begin(),s1.end(),s2.begin(),s2.end(),back_inserter(s3));

此外,形式上,你的compare是函数,不需要加括号。函数对象才需要加括号
s3里没有内容,不能直接写,要用插入迭代器
[解决办法]
#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 ;
}

读书人网 >C++

热点推荐