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 物件和兩個序列中的所有字元。

異常安全

強異常保證: 如果丟擲異常,則沒有副作用。

另見