what is the exact difference between them?

Suppose your objects are pair of integers .

Now given an array of objects : (1,6) , (2,4) , (1,1) , (3,1) , (1,30) , (2,2) .

You can define multiple ways of comparing these objects .

- You may say first value decides order , in case first value is same , then second value decides order .

Sorted Array : (1,1) , (1,6) , (1,30) , (2,2) , (2,4) , (3,1)

- You may say sum of the elements decides which pair is bigger . In case sum is same the first elements decides order .

Sorted Array : (1,1) , (2,2) , (3,1) , (2,4) , (1,6) , (1,30) .

- You may say product of elements decides which pair is bigger . In case product is same the first element decides order .

Sorted Array : (1,1) , (3,1) , (2,2) , (1,6) , (2,4) , (1,30)

Since multiple ways of comparing the elements is possible hence there exists sort functions which take comparator functions to be used for comparing elements . In case comparator function is not specified the normal sort order of the class is followed .

std::sort(begin(),end()) will always sort the passed container in increasing order but suppose you want to sort in some other order say decreasing order, you can do this by writhing a compare function or lambda that will do this for you

example:

struct compare

{

template

bool operator()(T const &a, T const &b) const { return a > b; }

};

std::sort(vec.begin(), vec.end(), compare());