系列C++有关问题之七:STL sort algorith

系列C++问题请教高手之七:STL sort algorith记得看侯捷的书,说到STLsort算法用到了多种排序方法结合,我的

系列C++问题请教高手之七:STL sort algorith
记得看侯捷的书,说到STL   sort算法用到了多种排序方法结合,我的程序如下:结果不对,请问为什么?(自己写Compare函数是因为,进一步要实现电话本等其它自定义的数据结构的排序)

#include   <iostream>
#include   <string>
#include   <vector>
#include   <algorithm>

using   namespace   std;

int   CompareString(string&   s1,   string&   s2)
{
string   strTemp;
        if(!s1.compare(s2))   return   0;
if(s1.compare(s2)> 0)  
//这里如果用if(s1.compare(s2)<0)   可以得到排序,但我想要另一种顺序的排序结果
{
strTemp   =   s2;
s2   =   s1;
s1   =   strTemp;
return   1;
}
else   return   -1;
}

int   main()
{    
vector <string>   vs;
string   str1( "Karl1 ");
string   str2( "Karl2 ");
string   str3( "Karl3 ");
vs.push_back(str2);
vs.push_back(str1);
vs.push_back(str3);

sort(vs.begin(),   vs.end(),   CompareString);
//sort(vs.begin(),   vs.end());
copy(vs.begin(),   vs.end(),   ostream_iterator <string> (cout));
return   0;  
}

[解决办法]
CompareString
返回结果为bool类型 是ture或者false没有-1
[解决办法]
个人意见:比较函数(函数对象)只是用来比较两个元素顺序的,在比较函数中修改应该是不可取的
[解决办法]
string是string的事情
但sort需要的函数是返回 bool类型的,你返回-1合适么?
[解决办法]
楼主还是找2本宝典认真学吧。《STL源码剖析》和《Effective STL》
[解决办法]
我记得STL中用于排序的比较函数对象都是Weakness Comparison Predicate的,就是有两个参数,如果参数1 ' < ' 参数2 (这里 ' < '按你定义的语义)就返回true,否则返回false。sort排序后,保证每个后面的元素 ! ' < ' 前面的元素 (注意这里的! ' < ',即不小于,它考虑到了元素等价的情况)。STL自己提供的默认比较函数对象就时less <T> 。
所以,应该以bool类型返回,并在 s1.compare(s2) <0 时(或其它你定义的 ' < ')返回true,其他情况下返回false。
string中的compare继承了C中的字符串比较语义,和STL排序算法不同。后者只要支持 ' < '就可以了。
[解决办法]
建议用greater,或less
[解决办法]
mark