По сути, мой вопрос: почему эта компиляция не выполняется?
#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);
Это произойдет. Зачем ему нужно начальное количество ведра? Просто кажется странным, что использование лямбды вынуждает меня добавить начальное количество сегментов, но при использовании функтора этого не произойдет. Смотрите пример здесь: C ++ unordered_set векторов для доказательства, что версии функтора не требуется начальное количество сегментов.