lexicographical_compare in C++
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
#include<iostream>
#include<algorithm> // for lexicographical_compare()
using namespace std;
int main()
{
char one[] = "geeksforgeeks";
char two[] = "gfg";
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
#include<iostream>
#include<algorithm> // for lexicographical_compare()
using namespace std;
bool comp ( char s1, char s2)
{
return tolower (s1)< tolower (s2);
}
int main()
{
char one[] = "geeksforgeeks";
char two[] = "Gfg";
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";
}
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
#include<bits/stdc++.h>
using namespace std;
int main()
{
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";
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]);
}
}
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
Last Updated :
11 Mar, 2024
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...