📜  C++ STL中的unordered_set hash_function()(1)

📅  最后修改于: 2023-12-03 14:39:52.739000             🧑  作者: Mango

C++ STL中的unordered_set hash_function()

在C++ STL中,unordered_set是一个很有用的容器,它可以用来存储一组不重复的元素,并且能够在常数时间内进行插入、删除和查找操作。其中,hash_function()是一个很有用的成员函数,它可以返回一个哈希函数对象,用来计算元素在unordered_set中的哈希值。本文将从以下几个方面介绍unordered_set hash_function()

unordered_set

首先,我们了解一下unordered_set的用法。unordered_set是一个关联容器,其中的元素是不重复的,顺序也是随机的。其用法类似于set,但是插入、删除和查找的平均时间复杂度均为常数时间,因为它内部使用了哈希表来实现。下面是一个使用unordered_set的例子:

#include <iostream>
#include <unordered_set>
using namespace std;

int main() {
    // 创建一个unordered_set
    unordered_set<int> myset = {1, 2, 3, 4, 5};

    // 向unordered_set中插入元素
    myset.insert(6);

    // 删除unordered_set中的元素
    myset.erase(3);

    // 遍历unordered_set中的元素
    for (int x : myset) {
        cout << x << " ";
    }
    cout << endl;

    // 查找元素在unordered_set中的存在情况
    if (myset.find(4) != myset.end()) {
        cout << "4 is in the set" << endl;
    } else {
        cout << "4 is not in the set" << endl;
    }

    return 0;
}

以上代码运行结果为:

1 2 4 5 6
4 is in the set
hash_function()

接下来,我们了解一下unordered_set hash_function()函数的用法。hash_function()是一个成员函数,用来计算元素的哈希值。该函数返回一个哈希函数对象,该对象可以接受任意类型的元素,并将它们转换为哈希值。下面是一个使用hash_function()函数的例子:

#include <iostream>
#include <unordered_set>
using namespace std;

int main() {
    // 创建一个unordered_set,并获取其哈希函数对象
    unordered_set<int> myset = {1, 2, 3, 4, 5};
    auto hash_func = myset.hash_function();

    // 计算元素的哈希值
    cout << "hash(2) = " << hash_func(2) << endl;
    cout << "hash(6) = " << hash_func(6) << endl;

    return 0;
}

以上代码运行结果为:

hash(2) = 2
hash(6) = 6
哈希函数对象

hash_function()函数返回的哈希函数对象,可以用来处理任意类型的元素。默认情况下,unordered_set使用std::hash来计算元素的哈希值,但是我们也可以自己定义一个哈希函数类,来对特定类型的元素进行哈希计算。下面是一个使用自定义哈希函数的例子:

#include <iostream>
#include <unordered_set>
using namespace std;

// 自定义哈希函数,可以计算字符串的哈希值
struct my_hash {
    size_t operator()(const string& s) const {
        size_t h = 0;
        for (char c : s) {
            h = h * 31 + c;
        }
        return h;
    }
};

int main() {
    // 创建一个unordered_set,并指定元素类型为string
    unordered_set<string, my_hash> myset = {"Hello", "World"};

    // 向unordered_set中插入元素
    myset.insert("Bye");

    // 删除unordered_set中的元素
    myset.erase("World");

    // 遍历unordered_set中的元素
    for (string s : myset) {
        cout << s << " ";
    }
    cout << endl;

    return 0;
}

以上代码运行结果为:

Hello Bye
总结

unordered_set是C++ STL中非常实用的容器,可以快速存储和查找不重复的元素。hash_function()函数是一个非常实用的成员函数,返回一个哈希函数对象,用来计算元素的哈希值。我们可以使用自定义的哈希函数类,来处理特定类型的元素。在实际编程中,应该熟练掌握unordered_sethash_function()的用法,并根据实际情况选择合适的哈希函数实现。