📅  最后修改于: 2023-12-03 14:39:52.739000             🧑  作者: Mango
在C++ STL中,unordered_set
是一个很有用的容器,它可以用来存储一组不重复的元素,并且能够在常数时间内进行插入、删除和查找操作。其中,hash_function()
是一个很有用的成员函数,它可以返回一个哈希函数对象,用来计算元素在unordered_set
中的哈希值。本文将从以下几个方面介绍unordered_set hash_function()
。
首先,我们了解一下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_set
和hash_function()
的用法,并根据实际情况选择合适的哈希函数实现。