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 returntrue
if 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
a
is greater thanb
, thena
will precedeb
.a
andb
are 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.