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.