gpt4 book ai didi

c++ - 为什么具有自定义哈希函数和自定义类的 unordered_set 需要初始数量的存储桶?

转载 作者:行者123 更新时间:2023-12-01 18:11:50 24 4
gpt4 key购买 nike

基本上我的问题是,为什么不能编译?

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


int main() {
vector<int> v{1,2,3};
auto hash_function=[](const vector<int>& v){
size_t hash;
for (int i = 0; i < v.size(); ++i) {
hash+=v[i]+31*hash;
}
return hash;
};

unordered_set<vector<int>, decltype(hash_function)> s(hash_function);
std::cout<<s.bucket_count();
std::cout<<"here";


}

但是如果我将 unordered_set 行更改为此

unordered_set<vector<int>, decltype(hash_function)> s(10,hash_function);

会的。为什么需要初始桶计数?使用 lambda 迫使我添加初始存储桶计数,但使用仿函数则不会,这似乎很奇怪。请参阅此处的示例:C++ unordered_set of vectors作为证明,仿函数版本不需要初始数量的存储桶。

最佳答案

顺便说一句,如果您可以访问 C++20,则可以为 lambda 执行 decltype 而无需构造 lambda,让 std::unordered_set 默认构建它。

using hash_function = decltype([](const std::vector<int>& v) {
size_t hash = 0;
for (int i = 0; i < v.size(); ++i) {
hash += v[i] + 31 * hash;
}
return hash;
});

std::unordered_set<std::vector<int>, hash_function> s();

关于c++ - 为什么具有自定义哈希函数和自定义类的 unordered_set 需要初始数量的存储桶?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60628732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com