Sorting 2D Vector in C++ | Set 1 (By row and column)

18 Jan, 2022
A 2D vector is a vector of vectors. In C++, 2D vectors are used for creating matrices, tables, or any other structures, dynamically. Basically, It is a matrix implemented with the help of vectors. They are created using the <vector> header file.
Following is a program to demonstrate 2D vectors in C++:
CPP
// C++ code to demonstrate 2D vector#include <iostream>#include <vector> // for 2D vectorusing namespace std; // Driver Codeint main(){    // Initializing 2D vector "vect" with    // values    vector<vector<int> > vect{ { 1, 2, 3 },                               { 4, 5, 6 },                               { 7, 8, 9 } };     // Displaying the 2D vector    for (int i = 0; i < vect.size(); i++) {        for (int j = 0; j < vect[i].size(); j++)            cout << vect[i][j] << " ";        cout << endl;    }     return 0;}
1 2 3 
4 5 6 
7 8 9 
Case 1: To sort a particular row of 2D vector This type of sorting arranges a selected row of 2D vector in ascending order. This is achieved by using sort() and passing iterators of 1D vector as its arguments. In sort(), it generally takes two parameters, the first one being the point of the array/vector from where the sorting needs to begin and the second parameter being the length up to which we want the array/vector to get sorted. This function is included in <algorithm> header file. 
CPP
// C++ code to demonstrate sorting of a// row of 2D vector#include <algorithm> // for sort()#include <iostream>#include <vector> // for 2D vectorusing namespace std; // Driver Codeint main(){    // Initializing 2D vector "vect" with    // values    vector<vector<int> > vect{ { 3, 5, 1 },                               { 4, 8, 6 },                               { 7, 2, 9 } };    // Number of rows;    int m = vect.size();     // Number of columns (Assuming all rows    // are of same size). We can have different    // sizes though (like Java).    int n = vect[0].size();     // Displaying the 2D vector before sorting    cout << "The Matrix before sorting 1st row is:\n";    for (int i = 0; i < m; i++) {        for (int j = 0; j < n; j++)            cout << vect[i][j] << " ";        cout << endl;    }     // Use of "sort()" for sorting first row    sort(vect[0].begin(), vect[0].end());     // Displaying the 2D vector after sorting    cout << "The Matrix after sorting 1st row is:\n";    for (int i = 0; i < m; i++) {        for (int j = 0; j < n; j++)            cout << vect[i][j] << " ";        cout << endl;    }     return 0;}
The Matrix before sorting 1st row is:
3 5 1 
4 8 6 
7 2 9 
The Matrix after sorting 1st row is:
1 3 5 
4 8 6 
7 2 9 
Case 2: To sort the entire 2D vector on basis of a particular column
In this type of sorting 2D vector is entirely sorted on basis of a chosen column. For example, if the chosen column is second, the row with the smallest value in the second column becomes the first row, the second smallest value in the second column becomes the second row, and so on.
{3, 5, 1}, 
{4, 8, 6}, 
{7, 2, 9};
After sorting this matrix by the second column, we get
{7, 2, 9} // Row with smallest value in second column 
{3, 5, 1} // Row with smallest value in second column 
{4, 8, 6}
This is achieved by passing a third argument in sort() as a call to the user-defined explicit function.
CPP
// C++ code to demonstrate sorting of a// 2D vector on basis of a column#include <algorithm> // for sort()#include <iostream>#include <vector> // for 2D vectorusing namespace std; // Driver function to sort the 2D vector// on basis of a particular columnbool sortcol(const vector<int>& v1, const vector<int>& v2){    return v1[1] < v2[1];} // Driver Codeint main(){    // Initializing 2D vector "vect" with    // values    vector<vector<int> > vect{ { 3, 5, 1 },                               { 4, 8, 6 },                               { 7, 2, 9 } };     // Number of rows;    int m = vect.size();     // Number of columns (Assuming all rows    // are of same size). We can have different    // sizes though (like Java).    int n = vect[0].size();     // Displaying the 2D vector before sorting    cout << "The Matrix before sorting is:\n";    for (int i = 0; i < m; i++) {        for (int j = 0; j < n; j++)            cout << vect[i][j] << " ";        cout << endl;    }     // Use of "sort()" for sorting on basis    // of 2nd column    sort(vect.begin(), vect.end(), sortcol);     // Displaying the 2D vector after sorting    cout << "The Matrix after sorting is:\n";    for (int i = 0; i < m; i++) {        for (int j = 0; j < n; j++)            cout << vect[i][j] << " ";        cout << endl;    }    return 0;}
The Matrix before sorting is:
3 5 1 
4 8 6 
7 2 9 
The Matrix after sorting is:
7 2 9 
3 5 1 
4 8 6 
Must Read:
Sorting 2D Vector in C++ | Set 2 (In descending order by row and column)
Sorting a Vector in C++
This article is contributed by Manjeet Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
anshikajain26
CPP-Library
cpp-vector
STL
C Language
C++
STL
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Substring in C++
Function Pointer in C
Left Shift and Right Shift Operators in C/C++
Different Methods to Reverse a String in C++
std::string class in C++
Map in C++ Standard Template Library (STL)
Initialize a vector in C++ (7 different ways)
Priority Queue in C++ Standard Template Library (STL)
Set in C++ Standard Template Library (STL)
vector erase() and clear() in C++