Lexicographical comparison
suggest changeTwo std::strings 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, returnstrue, otherwise it returnsfalse. - 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:
- Compare the first characters,
'B' == 'B'- move on. - Compare the second characters,
'a' == 'a'- move on. - Compare the third characters,
'r' == 'r'- move on. - The
str2range is now exhausted, while thestr1range still has characters. Thus,str2 < str1.