使用C++11的hash函数对字符串进行散列处理

作者: qwq 分类: 算法 发布时间: 2017-12-10 17:16

c++11 在 <functional> 头文件有个hash的函数

template<class Key >
struct hash;// not defined
(C++11 起)

哈希模板定义一个函数对象,实现了散列函数。这个函数对象的实例定义一个operator()

1。接受一个参数的类型Key.

2。返回一个类型为size_t的值,表示该参数的哈希值.

3。调用时不会抛出异常.

4。若两个参数k1k2相等,则std::hash<Key>()(k1)== std::hash<Key>()(k2).

5。若两个不同的参数k1k2不相等,则std::hash<Key>()(k1)== std::hash<Key>()(k2)成立的概率应非常小,接近1.0/std::numeric_limits<size_t>::max().

哈希模板是CopyConstructibleDestructible.

的无序关联式容器std::unordered_setstd::unordered_multisetstd::unordered_mapstd::unordered_multimap使用专业的模板std::hash默认的散列函数.

 

使用样例 洛谷P3370

#include <bits/stdc++.h>
#include <functional>
#include <string>
using namespace std;
vector<unsigned long long >a;
int main(int argc, char *argv[]) {
    ios::sync_with_stdio(0);

    std::hash<std::string> h;
    
    int n;
    cin>>n;
    string s;
    for(int i=0;i<n;i++){
        cin>>s;
        a.push_back(h(s));
    }
    sort(a.begin(),a.end());
    a.erase(unique(a.begin(),a.end()),a.end());
    cout<<(int)a.size()<<endl;

    return 0;
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注