lexicographical_compare in C++
Last Updated :
11 Mar, 2024
C++ STL offer many utilities to solve basic common life problems. Comparing values are always necessary, but sometimes we need to compare the strings also. Therefore, this article aims at explaining about "lexicographical_compare()" that allows to compare strings. This function is defined in "algorithm" header. It has two implementations. Syntax 1 : lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2)
Template:
template
bool lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2)
Parameters :
beg1 : Input iterator to initial position of first sequence.
end1 : Input iterator to final position of first sequence.
beg2 : Input iterator to initial position of second sequence.
end2 : Input iterator to final position of second sequence.
Return value :
Returns a boolean true, if range1 is strictly lexicographically
smaller than range2 else returns a false.
CPP
// C++ code to demonstrate the working of
// lexicographical_compare()
#include<iostream>
#include<algorithm> // for lexicographical_compare()
using namespace std;
int main()
{
// initializing char arrays
char one[] = "geeksforgeeks";
char two[] = "gfg";
// using lexicographical_compare for checking
// is "one" is less than "two"
if( lexicographical_compare(one, one+13, two, two+3))
{
cout << "geeksforgeeks is lexicographically less than gfg";
}
else
{
cout << "geeksforgeeks is not lexicographically less than gfg";
}
}
Time Complexity: O(N)
Space Complexity: O(1)
Output:
geeksforgeeks is lexicographically less than gfg
Syntax 2 : lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2, Compare comp)
Template:
template
bool lexicographical_compare(iter1 beg1, iter1 end1, iter2 beg2, iter2 end2)
Parameters :
beg1 : Input iterator to initial position of first sequence.
end1 : Input iterator to final position of first sequence.
beg2 : Input iterator to initial position of second sequence.
end2 : Input iterator to final position of second sequence.
comp : The comparator function that returns a boolean
true/false of the each elements compared. This function
accepts two arguments. This can be function pointer or
function object and cannot change values.
Return value :
Returns a boolean true, if range1 is strictly lexicographically smaller
than range2 else returns a false.
CPP
// C++ code to demonstrate the working of
// lexicographical_compare()
#include<iostream>
#include<algorithm> // for lexicographical_compare()
using namespace std;
// helper function to convert all into lower case:
bool comp (char s1, char s2)
{
return tolower(s1)<tolower(s2);
}
int main()
{
// initializing char arrays
char one[] = "geeksforgeeks";
char two[] = "Gfg";
// using lexicographical_compare for checking
// is "one" is less than "two"
// returns false as "g" has larger ASCII value than "G"
if( lexicographical_compare(one, one+13, two, two+3))
{
cout << "geeksforgeeks is lexicographically less than Gfg\n";
}
else
{
cout << "geeksforgeeks is not lexicographically less than Gfg\n";
}
// using lexicographical_compare for checking
// is "one" is less than "two"
// returns true this time as all converted into lowercase
if( lexicographical_compare(one, one+13, two, two+3, comp))
{
cout << "geeksforgeeks is lexicographically less ";
cout << "than Gfg( case-insensitive )";
}
else
{
cout << "geeksforgeeks is not lexicographically less ";
cout<< "than Gfg( case-insensitive )";
}
}
Time Complexity: O(N)
Space Complexity: O(1)
Output:
geeksforgeeks is not lexicographically less than Gfg
geeksforgeeks is lexicographically less than Gfg( case-insensitive )
Possible application : Comparing strings can be generally used in dictionary, where we need to place words in lexicographical order. Example of this can be to find the word which occurs 1st in dictionary among given set of words.
CPP
// C++ code to demonstrate the application of
// lexicographical_compare()
#include<bits/stdc++.h>
using namespace std;
int main()
{
// initializing char arrays
char list[][100]={
{'a','b','a','c','u','s'},
{'a','p','p','l','e'},
{'c','a','r'},
{'a','b','b','a'}
};
char min[100] = "zzzzzz";
// using lexicographical_compare for checking
// the smallest
for (int i=0; i<4; i++)
{
if( lexicographical_compare(list[i], list[i]
+ strlen(list[i]), min, min+strlen(min)))
{
strcpy(min,list[i]);
}
}
// prints "abacus"
cout << "The smallest string is : ";
for(int i = 0; min[i]!='\0'; i++)
{
cout<<min[i];
}
}
Time Complexity: O(N)
Space Complexity: O(1)
Output:
The smallest string is : abacus
Similar Reads
lexicographical_compare() in C++ STL
C++ STL offers many utilities to solve basic common life problems. Comparing values are always necessary, but sometimes we need to compare the strings also. Therefore, lexicographical_compare() is used to compare strings. It is commonly used in dictionaries to arrange words alphabetically; it entail
5 min read
Compare two strings lexicographically in Java
In this article, we will discuss how we can compare two strings lexicographically in Java. One solution is to use Java compareTo() method. The method compareTo() is used for comparing two strings lexicographically in Java. Each character of both the strings is converted into a Unicode value for comp
3 min read
iswgraph() in C/C++ with Examples
The iswgraph() is a built-in function in C/C++ which checks if the given wide character has a graphical representation or not. It is defined within the cwctype header file of C++. By default, the following characters are graphic: Digits (0 to 9)Uppercase letters (A to Z)Lowercase letters (a to z)Pun
2 min read
std::string::compare() in C++
The string::compare() function in C++ is used to compare a string or the part of string with another string or substring. It is the member function of std::string class defined inside <string> header file. In this article, we will learn how to use string::compare() in C++.The different ways to
4 min read
C++ Comparison Operators
Comparison operators are operators used for comparing two elements, these are mostly used with if-else conditions as they return true-false as result. There are mainly 6 Comparison Operators namely: Greater than (>) : this operator checks whether operand1 is greater than operand2. If the result t
3 min read
multimap key_comp in C++ STL
This is the part of Standard Template Library(STL) of C++. To use this STL, use Namespace: std and include âmapâ header file in the program. It returns the function object or comparison object or ordering delegate that compares the keys, which is a copy of this container's constructor argument. It i
2 min read
multimap key_comp() in C++ STL
The std::multimap::key_comp() is an inbuilt function in C++ STL which returns a copy of the comparison object used by the container.By default, this is a less object, which returns the same as operator â<'.It is a function pointer or a function object which takes two arguments of the same ty
2 min read
logical_or in C++
logical_or in C++ is a binary function object class which returns the result of the logical "or" operation between its two arguments (as returned by operator ||). Syntax: template struct logical_or : binary_function { T operator() (const T& a, const T& b) const {return a||b;} }; Parameters:
2 min read
map value_comp() in C++ STL
The std::map::value_comp() is a function in C++ STL. It returns a function object that compares objects of type std::map::value. Syntax: value_compare value_comp() const Parameters: It does not accept any parameters. Returns: This method returns a function object that compares objects of type std::m
2 min read
isgreaterequal() in C/C++
In C++, isgreaterequal() is a predefined function used for mathematical calculations. math.h is the header file required for various mathematical functions. isgreaterequal() function used to check whether the 1st argument given to the function is greater than or equal to the 2nd argument given to th
3 min read