系列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
系列C++有关问题之七:STL sort algorith
系列C++问题请教高手之七:STL sort algorith记得看侯捷的书,说到STLsort算法用到了多种排序方法结合,我的
