打印绝对排序数组。有关说明,请参阅示例输出。
input: arr = [2, -7, -2, -2, 0]
output: [0, -2, -2, 2, -7]
Run Code Online (Sandbox Code Playgroud)
现在我使用 lambda 函数作为 STL 的比较器,std::sort但它没有给出正确的答案;帮助将不胜感激。
代码:
vector<int> absSort(const vector<int>& at)
{
vector <int> arr = at;
sort(arr.begin(), arr.end(), [&](const int a, const int b){
if (abs(a) < abs(b)) return -1;
if (abs(a) > abs(b)) return 1;
if (a < b) return -1;
if (a > b) return 1;
return 0;
});
return arr;
}
Run Code Online (Sandbox Code Playgroud)
您的比较功能不正确。它必须返回一个布尔值,指示是否a和b的顺序正确。
它应该是这样的:
auto compare = [](int a, int b)
{
int abs_a = abs(a), abs_b = abs(b);
if (abs_a < abs_b) return true;
if (abs_b < abs_a) return false;
return a < b;
};
Run Code Online (Sandbox Code Playgroud)
注意:使用自动按引用捕获 ( [&])通常不是一个好主意,因为很容易在 lambda 表达式中意外引入副作用。我在我的示例中删除了它,因为实际上无论如何都不需要捕获任何东西。我们可以辩论风格,但作为个人喜好的问题,我总是使我的所有捕获明确,无论它们是通过引用还是通过价值。