public member function
<locale>

std::collate::compare

int compare (const char_type* low1, const char_type* high1             const char_type* low2, const char_type* high2) const;
比较字符序列
将序列 [low1,high1) 中的字符序列与 [low2,high2) 中的字符序列进行比较,如果第一个序列被认为大于第二个序列,则返回 1;如果被认为小于第二个序列,则返回 -1。否则,如果两者互不大于也互不小于,则认为它们相等,返回 0

内部函数仅调用虚保护成员 do_compare,该函数默认对标准特化执行简单的字典序比较(直接比较 charwchar_t 的值)。

一个字典序比较 是通常用于在字典中按字母顺序对单词进行排序的比较类型;它涉及依次比较两个序列中相同位置的元素,直到找到一个元素与其他元素不相等。第一个不匹配元素的比较结果就是字典序比较的结果。

参数

low1, high1
第一个序列的开始和结束字符指针。使用的范围是 [low1,high1),它包含 low1high1 之间的所有字符,包括 low1 指向的字符,但不包括 high1 指向的字符。
low2, high2
第二个序列的开始和结束字符指针。使用的范围是 [low2,high2)
请注意,对于两个序列,空字符(如果存在)也会被比较,并且函数会继续比较其后的字符,直到找到不匹配项或其中一个序列被耗尽。
成员类型char_type是分面(facet)的字符类型(定义为collate的模板参数charT的别名)。

返回值

以下值之一
描述
-1第一个序列小于第二个序列(即,第一个序列在字母顺序上排在第二个序列之前)。
0两个序列被视为相等。
1第一个序列大于第二个序列(即,第一个序列在字母顺序上排在第二个序列之后)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// collate::compare example
#include <iostream>       // std::cout
#include <string>         // std::string
#include <locale>         // std::locale, std::collate, std::use_facet

int main ()
{
  char first[]="STRAWBERRY";       // c-string
  std::string second="BLUEBERRY";  // standard string

  std::locale loc;                 // get "C" locale

  // get collate facet:
  const std::collate<char>& coll = std::use_facet<std::collate<char> >(loc);

  int result = coll.compare (first, first+10,
                             second.data(), second.data()+second.length());
  std::cout << first;
  switch (result) {
    case 1:
      std::cout << " is greater than "; break;
    case 0:
      std::cout << " is equal to "; break;
    case -1:
      std::cout << " is less than "; break;
  }
  std::cout << second << '\n';
  return 0;
}

输出

STRAWBERRY is greater than BLUEBERRY


数据竞争

访问 facet 对象和两个序列中的所有字符。

异常安全

强异常保证: 如果抛出异常,则没有副作用。

另见