I'm practicing lambdas:
int main()
{
std::vector<int> v {1,2,3,4};
int count = 0;
sort(v.begin(), v.end(), [](const int& a, const int& b) -> bool
{
return a > b;
});
}
This is just code from GeeksForGeeks to sort in descending order, nothing special. I added some print statements (but took them out for this post) to see what was going on inside the lambda. They print the entire vector, and the a and b values:
1 2 3 4
a=2 b=1
2 1 3 4
a=3 b=2
3 2 1 4
a=4 b=3
4 3 2 1 <- final
So my more detailed question is:
What's the logic behind the order the vector elements are being passed into the a and b parameters?
Is b permanently at index 0 while a is iterating? And if so, isn't it a bit odd that the second param passed to the lambda stays at the first element? Is it compiler-specific? Thanks!
By passing a predicate to
std::sort(), you are specifying your sorting criterion. The predicate must returntrueif the first parameter (i.e.,a) precedes the second one (i.e.,b), for the sorting criterion you are specifying.Therefore, for your predicate:
If
ais greater thanb, thenawill precedeb.aandbare just pairs of elements of the elements you are passing tostd::sort(). The "logic" will depend on the underlying algorithm thatstd::sort()implements. The pairs may also differ for calls with identical input due to randomization.