首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

STL 中的set_difference求个对象的差集,帮忙见见

2013-07-08 
STL 中的set_difference求个对象的差集,帮忙看看对STL不太熟悉,看看这个这段代码错在哪里了,或者该怎么写?

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 ;
}

热点排行