
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
How to find the maximum element of a Vector using STL in C++?
A vector in C++ is a dynamic array that stores elements of the same data type and can change its size when needed. In this article, we are given a vector and our goal is to find the maximum (largest) element using different STL methods in C++.
Let's understand this with an example:
// Example 1 std::vector<int> vec1 = {11, 13, 21, 45, 8}; The largest element is 45. // Example 2 std::vector<int> vec2 = {1, 9, 2, 5, 7}; The largest element is 9.
Finding Maximum Element of a Vector Using STL in C++
There are multiple ways to find the largest element in a vector in C++. We will cover the following approaches using STL functions:
Using std::max_element()
In this approach, we use the std::max_element() function from the <algorithm> header. This function looks at all the elements in a given range and returns the iterator to the largest one. We will use this function to find the maximum value in the vector.
Example
Below is a C++ program where we create a vector and pass its begin() and end() iterators to std::max_element() and it returns the position of the largest value which we then print.
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> vec = {4, 9, 2, 6, 3}; // Print all elements in the vector std::cout << "Vector elements: "; for (int num : vec) { std::cout << num << " "; } std::cout << std::endl; // Find the maximum element using std::max_element auto maxElem = std::max_element(vec.begin(), vec.end()); // Print the maximum element std::cout << "The maximum element is: " << *maxElem << std::endl; return 0; }
Below is the output of the program, which shows the largest number in the given vector using the minmax_element() function:
Vector elements: 4 9 2 6 3 The maximum element is: 9
Time Complexity: O(n) because std::max_element() checks each element once to find the maximum.
Space Complexity: O(1) because no extra storage beyond a few variables is used.
Using std::minmax_element()
The std::minmax_element() function from the STL finds both the smallest and largest elements in a range in a single pass. It returns a pair of iterators where .first points to the minimum element and .second points to the maximum element. We use .second to get the maximum value.
Example
Here is a C++ program where we pass a vector's begin() and end() iterators to std::minmax_element() and print the value pointed to by the second iterator, which is the maximum element.
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> vec = {4, 9, 2, 6, 3}; // Display all elements of the vector std::cout << "Vector elements: "; for (int num : vec) { std::cout << num << " "; } std::cout << std::endl; // Find the min and max element using std::minmax_element auto result = std::minmax_element(vec.begin(), vec.end()); // Display the maximum element std::cout << "The maximum element is: " << *result.second << std::endl; return 0; }
The output below shows the vector elements and the maximum value found using the minmax_element() function.
Vector elements: 4 9 2 6 3 The maximum element is: 9
Time Complexity: O(n), we scan the vector once to find both the minimum and maximum elements.
Space Complexity: O(1), the space used is constant.
Using std::sort()
The std::sort() function from the STL sorts elements in a given range. We use it here with std::greater<int>() as a comparator to sort the vector in descending order. This way, the largest element comes first.
Example
Here is a complete C++ program where we sort the vector in descending order and then print the first element as the maximum value.
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> vec = {4, 9, 2, 6, 3}; // Display all elements of the vector std::cout << "Vector elements: "; for (int num : vec) { std::cout << num << " "; } std::cout << std::endl; // Sort the vector in descending order std::sort(vec.begin(), vec.end(), std::greater<int>()); // Display the maximum element (first element after sorting) std::cout << "The maximum element is: " << vec[0] << std::endl; return 0; }
Here's the output of the program. It first shows the vector elements and then prints the largest one after sorting in descending order
Vector elements: 4 9 2 6 3 The maximum element is: 9
Time Complexity: O(n log n) because std::sort sorts the entire vector.
Space Complexity: O(log n) because std::sort uses quicksort which requires O(log n) stack space.
Using a priority queue
In this approach, we use std::priority_queue from the STL, which by default behaves like a max heap. This means the largest element always stays at the top, and we can directly access it using the top() function to get the maximum value.
Example
Here is a complete C++ program where we insert all vector elements into a priority queue and then print the top element as the maximum value.
#include <iostream> #include <vector> #include <queue> int main() { std::vector<int> vec = {4, 9, 2, 6, 3}; // Display all elements of the vector std::cout << "Vector elements: "; for (int num : vec) { std::cout << num << " "; } std::cout << std::endl; // Create a max heap (priority queue) std::priority_queue<int> pq(vec.begin(), vec.end()); // Display the maximum element std::cout << "The maximum element is: " << pq.top() << std::endl; return 0; }
Below is the output showing the largest number from the vector using a max-heap priority queue.
Vector elements: 4 9 2 6 3 The maximum element is: 9
Time Complexity: O(n log n) becuase inserting each element into the priority queue takes O(log n).
Space Complexity: O(n), we store all elements in the priority queue.