一直记不清怎么定义这个cmp函数,今天来捋一捋。
Python
参考
引文
通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1
例子
在Python中,默认的sorted函数是升序的。
a = [2, 4, 1, 6, 3]
print sorted(a)
# [1, 2, 3, 4, 6]
要定义降序的函数,要这么写:
def cmp(x, y):
if x > y:
return -1
if x < y:
return 1
else:
return 0
a = [2, 4, 1, 6, 3]
print sorted(a, cmp)
# [6, 4, 3, 2, 1]
个人理解:Python默认就按升序来排序,如果非要变成降序,那就把原来的逻辑颠倒,x>y的时候返回-1,x
STL vector
void pvec(vector<int> v)
{
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << ' ';
}
cout << endl;
}
struct cmp
{
bool operator () (int a, int b)
{
return a > b;
}
};
int main(int argc, const char * argv[]) {
// insert code here...
vector<int> v = {2,43,12,76,11};
sort(v.begin(), v.end());
pvec(v);
v = {2,43,12,76,11};
sort(v.begin(), v.end(), cmp());
pvec(v);
return 0;
}
// result:
// 2 11 12 43 76
// 76 43 12 11 2
可见,STL里面默认也是升序,要实现降序,可以编写cmp函数如上。这样,a>b时返回1,否则返回0。
事实上,不如直接记下来,a>b
就是降序,a<b
就是升序。