我需要从给定的随机有序元素中获得不增加的顺序。经过大量工作,我意识到以下代码产生不同的输出。为什么代码产生不同的输出?
bool cmp(int i,int j)
{
if(i<j)
return 0;
return 1;
}
bool cmp(int i,int j)
{
return i>j;
}
答案 0 :(得分:2)
第一个功能应该是
bool cmp(int i,int j)
{
if(i>j)
return 1;
return 0;
}
获得等效输出。
或者使用以下功能:
bool cmp(int i,int j)
{
return -1 * i < -1 * j;
}
答案 1 :(得分:2)
当两个函数具有相同的输入时,它们会产生不同的结果。所以cmp(1,1)
会产生不同的结果。
鉴于此cmp()
函数:
bool cmp(int i,int j) {
if(i<j)
return 0;
return 1;
}
以下陈述将产生未定义的行为:
std::vector<int> x;
std::sort(x.begin(), x.end(), cmp);
传递给std::sort
的比较器需要实现Compare
。其中一个要求是cmp(1,1)
将返回false。您的代码返回true。
答案 2 :(得分:2)
你的第一个功能相当于&#34;不低于&#34;即&#34;大于或等于&#34;当你想要的是&#34;更大&#34;。另外,鉴于这是C ++ 11,为什么不这样做:
std::sort(v.begin(), v.end(), std::greater<int>());