Two std::string
s can be compared lexicographically using the operators ==
, !=
, <
, <=
, >
, and >=
:
std::string str1 = "Foo";
std::string str2 = "Bar";
assert(!(str1 < str2));
assert(str > str2);
assert(!(str1 <= str2));
assert(str1 >= str2);
assert(!(str1 == str2));
assert(str1 != str2);
All these functions use the underlying std::string::compare()
method to perform the comparison, and return for convenience boolean values. The operation of these functions may be interpreted as follows, regardless of the actual implementation:
operator==
:
If str1.length() == str2.length()
and each character pair matches, then returns true
, otherwise returns false
.
operator!=
:
If str1.length() != str2.length()
or one character pair doesn't match, returns true
, otherwise it returns false
.
operator<
or operator>
:
Finds the first different character pair, compares them then returns the boolean result.
operator<=
or operator>=
:
Finds the first different character pair, compares them then returns the boolean result.
Note: The term character pair means the corresponding characters in both strings of the same positions. For better understanding, if two example strings are str1
and str2
, and their lengths are n
and m
respectively, then character pairs of both strings means each str1[i]
and str2[i]
pairs where i = 0, 1, 2, ..., max(n,m). If for any i where the corresponding character does not exist, that is, when i is greater than or equal to n
or m
, it would be considered as the lowest value.
Here is an example of using <
:
std::string str1 = "Barr";
std::string str2 = "Bar";
assert(str2 < str1);
The steps are as follows:
'B' == 'B'
- move on.'a' == 'a'
- move on.'r' == 'r'
- move on.str2
range is now exhausted, while the str1
range still has characters. Thus, str2 < str1
.