2014-10-16 51 views
0

我正在尝试使用set_symmetric_difference(C++)函数来查找只出现在一个集合中的所有对象,但不是两个都出现。如何编写用于set_symmetric_difference [C++]的字符串比较器?

set<string> set1, set2; //assume filled with strings 
vector<string> output; 

set_symmetric_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), back_inserter(output), comparator); 

我似乎有点不确定如何编写比较器来按字母顺序比较字符串。这是我最好的猜测,到目前为止:

bool comparator(string s1, string s2) 
{ 
    for(int i = 0; i < min(length1,length2); i++) 
    { 
     if(s1[i] < s2[i]) return true; 
     else if(s1[i] == s2[i]) continue; 
     else return false; 
    } 
} 

我意识到上面的是行不通的,对于字符串布拉德和布拉德利,因为它会说,他们是等价的。 我只是想知道,这种对true,continue和false的建模是否是为字母顺序设置字符串比较器的正确方法。

我也关心比较ascii值,因为大写字母与小写字母相比可以排除“字母顺序”的顺序,尽管我想这可以很容易地通过在字符串上使用to_lower()来修复。

回答