How to Sort using Member Function as Comparator in C++?
Last Updated :
23 Jul, 2024
In C++, sorting is a common operation that can be customized by providing a comparator function. When working with classes, we might need to sort objects based on their member variables. Using a member function as a comparator is a good technique to achieve this.
In this article, we will learn how to sort using a member function as a comparator in C++.
Example:
Consider an example, where we have a Student
class with name
and age
as its attributes and we want to sort a vector of Student
objects based on the age
attribute.
Input:
vector<Student> students = {
Student("Alice", 23),
Student("Bob", 20),
Student("Charlie", 22)
};
Output:
Sorted students by age:
Bob 20
Charlie 22
Alice 23
Ways to Sort Using Member Function as Comparator
There are two efficient approaches to sort using a member function as a comparator in C++:
1. Sort Using a Static Member Function
In C++, the static member function is defined within the class and can be used directly as a comparator in the std::sort function. This function compares two objects of the class and determines their order based on a specific member variable, although it can access only static members of the class, but can be used as a comparator.
Example:
C++
// C++ Program to illustrate how to sort using a static
// member function
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
// define a class with a compare member function
class Student {
public:
string name;
int age;
// Constructor
Student(string n, int a)
: name(n)
, age(a)
{
}
// Static member function to compare students by age
static bool compareByAge(const Student& a,
const Student& b)
{
return a.age < b.age;
}
};
int main()
{
// Initialize the vector of Student objects
vector<Student> students
= { Student("Alice", 23), Student("Bob", 20),
Student("Charlie", 22) };
// Sort the vector using the static member function as
// the comparator
sort(students.begin(), students.end(),
Student::compareByAge);
// Output the sorted list of students
cout << "Sorted students by age:" << endl;
for (const Student& student : students) {
cout << student.name << " " << student.age << endl;
}
return 0;
}
OutputSorted students by age:
Bob 20
Charlie 22
Alice 23
Time Complexity: O(n log n), where n is the number of elements
Auxiliary Space: O(1)
2. Sort Using a Lambda Function with Member Function Call
Another approach is to use a lambda function that can be used to call the member function as the comparator, when sorting objects. This allows more flexibility and can access non-static members.
Example:
C++
// C++ Program to illustrate how to sort using a lambda
// function calling a member function
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
// define a class student with a member function to compare
class Student {
public:
string name;
int age;
// Constructor
Student(string n, int a)
: name(n)
, age(a)
{
}
// Member function to compare students by age
bool isYoungerThan(const Student& other) const
{
return age < other.age;
}
};
int main()
{
// Initialize the vector of Student objects
vector<Student> students
= { Student("Alice", 23), Student("Bob", 20),
Student("Charlie", 22) };
// Sort the vector using a lambda function as the
// comparator
sort(students.begin(), students.end(),
[](const Student& a, const Student& b) {
return a.isYoungerThan(b);
});
// Output the sorted list of students
cout << "Sorted students by age:" << endl;
for (const Student& student : students) {
cout << student.name << " " << student.age << endl;
}
return 0;
}
OutputSorted students by age:
Bob 20
Charlie 22
Alice 23
Time Complexity: O(n log n), where n is the number of elements
Auxiliary Space: O(1)
Similar Reads
How to Sort a Vector Using a Custom Comparator in C++? In C++, the std::sort() function sorts the given vector in increasing order by default. The custom comparator is a function that defines the order in which the elements of a std::vector should be sorted. It is passed as the parameter to the std::sort() function.In this article, we will learn how to
4 min read
How to Use Custom Comparator with Set in C++? In C++, sets are associative containers that store unique elements in some sorted order. By default, set store data in increasing order but we can change this using a custom comparator. In this article, we will learn, how to declare a set with a custom comparator in C++ STL. Example Input: Data = {1
2 min read
Function Pointer to Member Function in C++ In C++, function pointers enable users to treat functions as objects. They provide a way to pass functions as arguments to other functions. A function pointer to a member function is a pointer that points to a non-static member function of a class. In this article, we will learn how to use a functio
3 min read
How to Sort an Array in Descending Order using STL in C++? Sort an array in descending order means arranging the elements in such a way that the largest element at first place, second largest at second place and so on. In this article, we will learn how to sort an array in descending order using STL in C++. ExamplesInput: arr[] = {11, 9, 45, 21};Output: 78
4 min read
How to Initialize Multiset with Custom Comparator in C++? In C++, a multiset container stores the data in a sorted order. By default, this order is increasing order (using < operator as comparator) but we can change this order by providing a custom comparator. In this article, we will learn how to initialize a multiset with a custom comparator function
2 min read
How to Sort an Array of Strings Using Pointers in C++? In C++, sorting an array of strings using pointers is quite different from normal sorting because here the manipulation of pointers is done directly, and then according to which string is pointed by the pointer the sorting is done. The task is to sort a given array of strings using pointers. Example
2 min read
How to Sort a Vector of Custom Objects in C++? In C++, vectors are dynamic arrays and sorting a vector of custom objects means arranging the objects in a certain order. In this article, we will learn how to sort a vector of custom objects in C++. Sorting a Vector of Custom Objects in C++To sort a vector of custom objects in C++, we can use the s
2 min read
How to Sort an Array in C++? Sorting an array involves rearranging its elements in a specific order such as from smallest to largest element or from largest to smallest element, etc. In this article, we will learn how to sort an array in C++.Example:Input: arr ={5,4,1,2,3}Output: 1 2 3 4 5Explanation: arr is sorted in increasin
4 min read
Custom Comparator for Multimap in C++ In C++ multimap is a container to store key-value pairs allowing duplicate keys which is not allowed in a map container. By default, the multimap container uses the less than '<' operator to compare the keys for ordering the entries but also allows the use of the custom comparator. In this articl
2 min read
How to Sort a Vector in a Map in C++? In C++, we can create a map container where the values associated with keys is a vector. In this article, we will learn how to sort a vector within a map in C++. Example Input: myMap = { {3, {9, 7, 3}}, {5, {4, 2, 8, 1, 6}}, {8, {1, 2, 5, 8}} }; Output: Map: Key: 3, Sorted Vector: [3 7 9 ] Key: 5, S
2 min read