词典比较

可以使用运算符 ==!=<<=>>= 按字典顺序比较两个 std::string

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);

所有这些函数都使用底层的 std::string::compare() 方法来执行比较,并返回方便的布尔值。无论实际实现如何,这些功能的操作可以解释如下:

  • operator==

    如果 str1.length() == str2.length() 和每个字符对匹配,则返回 true,否则返回 false

  • operator!=

    如果 str1.length() != str2.length() 或一个字符对不匹配,则返回 true,否则返回 false

  • operator< 或 operator>

    找到第一个不同的字符对,比较它们然后返回布尔结果。

  • operator<= 或 operator>=

    找到第一个不同的字符对,比较它们然后返回布尔结果。

注意: 术语字符对表示相同位置的两个字符串中的相应字符。为了更好地理解,如果两个示例字符串是 str1str2,并且它们的长度分别是 nm,那么两个字符串的字符对意味着每个 str1[i]str2[i] 对,其中 i = 0,1,2,…,max(n, m) 。如果对于任何不存在相应字符的 i ,即当 i 大于或等于 nm 时,它将被视为最低值。

以下是使用 < 的示例:

std::string str1 = "Barr";
std::string str2 = "Bar";

assert(str2 < str1);

步骤如下:

  1. 比较第一个字符,'B' == 'B' - 继续前进。
  2. 比较第二个字符,'a' == 'a' - 继续前进。
  3. 比较第三个字符,'r' == 'r' - 继续前进。
  4. str2 系列现已耗尽,而 str1 系列仍有特征。因此,str2 < str1