how to sort the co-ordinates (x, y) with respect to x? (c++ stl)

Suppose the list of pairs <(1, 3),(3, 2), (2, 4)> and i want to result as
<(1, 3), (2, 4), (3, 2)>. How can i implement it using some STL in C++?

Also sorting with respect to second element of the pair?
like: <(3, 2), (1, 3), (2, 4)> !

1 Like

STL Pairs already have the less than (and other relational) operator defined for them. The behavior is such that a < b iff a.first < b.first || a.first == b.first && a.second < b.second

That definition is compatible with your task, therefore simply firing up a sort() or stable_sort() should work.

#include <vector>
#include <pair>
#include <algorithm>

using namespace std;


vector<pair<int, int>> a;
sort(a.begin(), a.end());

@beginnerchef:You can refer to the code written by me :




The solution provided by @knb_dtu is accurate for the question you asked.
But still, if you feel any problem in understanding or implementing like that, you can have a look on this piece of code.

Define a struct in c named point (or anything you wish)

How to define ?

struct point{
int x,y;

After that, make a array of elements using line like this : struct point a[10000];

-> according to your useā€¦

Now its turn to sort the data for you, here is the code :

void sort(struct point* data, int n) {

int j,i;







            struct data temp = data[i];

            data[i] = data[j];

            data[j] = temp;





Just wrote using an O(n^2) sort algo, you can easily understand, and then work on even implementing merge sort/quick sort using this struct which would be simple if you get the concept. :slight_smile:

In case you dont want to use an stl, look at this.

another alternative approach would be using std::set as the following link illustrates




using namespace std;

// compare function to sort pairs with respect to first element.

bool cmpfunc(const pair<int,int> &u,const pair<int,int> &v)


 return true;

 return false;


// compare function to sort pairs with respect ot second element.

bool cmpfunc (const pair<int,int> &u , const pair<int,int> &v)


return true;

return false; 


int main()
//initialize vector of pairs

vector<pair<int,int> v;


return 0;


You can solve it using
[sort][1] function in STL C++.

When you will sort a pair of vectors using sort() then it will automatically sort wrt to first element of pair i.e x.

To sort with respect to y , trick is to pass a compare() function as third parameter in function and work accordingly

bool compare(pair p,pair q){
    //to solve w.r.t to y
    return p.second < q.second;

Here is complete [implementation][2].

thank you for your reply.
may you explain how this sort is working and what if I wish to sort with respect to y value of (x, y)!

what if I wish to sort with respect to y value of (x, y)?