I tried to use lambda function with sort
, but was getting "Segmentation fault" errors. I managed to simplify the code to the following:
#include <iostream> #include <algorithm> int main() { const int len = 18; int intArr[len]; for (int i=0;i<len;i++) intArr[i]=1000+i; // The following is expected to sort all but the last element of the array std::sort(intArr, intArr + len -1, [](int a, int b) { std::cout<<"("<<a<<", "<<b<<")\n"; return (a<b?-1:(a>b?1:0)); }); return 0; }
I compile and run this code in Ubuntu 11.04 (x64) using
g++ -std=gnu++0x test2.cpp && ./a.out
.
It prints a lot of pairs of the form (large_integer, 1008), a couple of (0, 1008) and exits with "Segmentation fault".
The comparison predicate should return a bool: true if a < b and false otherwise. Change the return statement to:
return a < b;
Not to be confused with C-style 3-way comparison functions.
NOTE: Though C++20 does introduce a 3-way comparison operator <=>
, sort
would still expect a 2-way compare predicate.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With