public member function
<locale>

std::collate::hash

long hash (const char_type* low, const char_type* high) const;
获取哈希值
返回字符串的哈希值,该字符串对应于字符序列[low,high)

哈希值使得两个具有相同哈希值的字符串使用collate::compare进行比较时相等。

请注意,哈希值不保证是唯一的,因此两个不同的字符串可能会产生相同的哈希值。但是,此类冲突的概率应接近1/numeric_limits<unsigned long>::max()(在大多数系统上为十亿分之一)。

内部,此函数仅调用虚保护成员do_hash,该函数默认执行上述操作。

参数

low, high
指向序列开始和结束字符的指针。使用的范围是[low,high),它包含low和high指向的字符之间的所有字符,包括low指向的字符,但不包括high指向的字符。
请注意,空字符(如果有)也会被考虑在内,用于哈希值,以及它们之后的所有字符,直到high。
成员类型char_type是分面(facet)的字符类型(定义为collate的模板参数charT的别名)。

返回值

一个标识整个字符序列内容的整数值。

示例

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
// collate::hash example
#include <iostream>       // std::cin, std::cout
#include <string>         // std::string, std::getline
#include <locale>         // std::locale, std::collate, std::use_facet

int main ()
{
  std::string myberry = "strawberry";
  std::string yourberry;

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

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

  long myhash = coll.hash(myberry.data(),myberry.data()+myberry.length());

  std::cout << "Please, enter your favorite berry: ";
  std::getline (std::cin,yourberry);

  long yourhash = coll.hash(yourberry.data(),yourberry.data()+yourberry.length());

  if (myhash == yourhash)
    std::cout << "Mine too!\n";
  else
    std::cout << "I prefer strawberries...\n";

  return 0;
}

可能的输出

Please enter your favorite berry: strawberry
Mine too!


数据竞争

访问分面对象以及范围[low,high)中的字符。

异常安全

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

另见