stable_sort()解析,该怎么处理

stable_sort()解析
bool islonger(const string&s1,const string&s2)
{
 return s1.size()>s2.size();
}

char cx[]={"fox","red","the","over","slow","jumps","quick","turtle"}
vector<string> svec(cx,cx+8);
.......
stable_sort(svec.begin(),svec.end(),islonger);
1。此处的stable_sort()函数稳定排序是怎么的原理?
2。islonger作参数在stable_sort()起什么作用,?

------解决方案--------------------
islonger在这里是做条件判断的。稳定排序的原理还是去看下源码可能会有所收获,这个我看过不过现在忘记啦。
------解决方案--------------------
1.stable_sort 和 sort的区别在于 前者作排序可以使原来的"相同"的值在序列中的相对位置不变

如 1 4 6 7 4' (4 和 4'值相等,加上' 表示是2个元素)
那么stable_sort能保证排序完 4 仍然在4' 前 也就是输出1 4 4' 6 7;但是sort 没有这个功能,算法不能保证这一点

归根结底这是数据结构中 关于排序算法是稳定还是不稳定的讨论

2.在标准算法<algorithm>中的一部分算法 如果这个算法默认使用的是 < 运算符,那么这类算法通常提供一个重载版本,这个重载版本包括3个参数,而不是2个.新增的第三个参数是一个函数指针,这个函数指针指向的函数 就是用来代替默认的 < 运算符的.
也就是说如果容器中的2个元素 ,元素a和元素b,输入个这个新增的比较函数之后,函数返回true,那么a将会放在b前面,LZ给的例子里面这个比较函数能够用使长度大的排在前面.

同时,使用了stable_sort能够保证2个长度相同的元素按原顺序排列.


LZ显然对STL不够了解,最好重新学下


------解决方案--------------------
另外,LZ的程序是不能够通过编译的

char cx[]={"fox","red","the","over","slow","jumps","quick","turtle"}

显然应该改为char *