首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stl unordered_set如何设置初始存储桶计数

stl unordered_set如何设置初始存储桶计数
EN

Stack Overflow用户
提问于 2013-04-07 01:14:00
回答 3查看 1.6K关注 0票数 0

对于unordered_map,我通过以下方式设置初始存储桶计数:

代码语言:javascript
复制
unordered_map<string, dictionaryWord> dictionary(17749); // set initial bucket count to 17749

这种方式似乎不适用于unordered_set。

代码语言:javascript
复制
/*line 150*/ unsigned char mask;
/*line 151*/ unordered_set<QueryID> query_id(109); // set initial bucket count to 109

编译器错误= 1)应在数值常量之前使用标识符。2)应为‘,’或‘...’在数值常量之前。并继续犯了一堆错误

如何对unordered_set做同样的事情?

谢谢。

=================================================

如果删除"(109)“,则没有错误。

代码语言:javascript
复制
"/usr/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .clean-conf
make[1]: Entering directory `/home/petros/NetBeansProjects/ACM_test'
rm -f -r build/Release
rm -f dist/Release/GNU-Linux-x86/acm_test
make[1]: Leaving directory `/home/petros/NetBeansProjects/ACM_test'


CLEAN SUCCESSFUL (total time: 80ms)

"/usr/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/home/petros/NetBeansProjects/ACM_test'
"/usr/bin/make"  -f nbproject/Makefile-Release.mk dist/Release/GNU-Linux-x86/acm_test
make[2]: Entering directory `/home/petros/NetBeansProjects/ACM_test'
mkdir -p build/Release/GNU-Linux-x86/ref_impl
rm -f build/Release/GNU-Linux-x86/ref_impl/core.o.d
g++ -pthread -O3 -std=c++11   -c -O2 -pthread -O3 -std=c++11 -MMD -MP -MF build/Release/GNU-Linux-x86/ref_impl/core.o.d -o build/Release/GNU-Linux-x86/ref_impl/core.o ref_impl/core.cpp
ref_impl/core.cpp:151:37: error: expected identifier before numeric constant
ref_impl/core.cpp:151:37: error: expected ‘,’ or ‘...’ before numeric constant
ref_impl/core.cpp: In function ‘ErrorCode StartQuery(QueryID, const char*, MatchType, unsigned int)’:
ref_impl/core.cpp:250:24: error: expected unqualified-id before ‘(’ token
ref_impl/core.cpp:250:38: error: missing template arguments before ‘)’ token
ref_impl/core.cpp:250:39: error: expected ‘;’ before ‘query_id’
ref_impl/core.cpp:257:19: error: ‘query.SameQueries::query_id’ does not have class type
ref_impl/core.cpp: In function ‘ErrorCode EndQuery(QueryID)’:
ref_impl/core.cpp:265:44: error: ‘queries.std::vector<_Tp, _Alloc>::operator[]<SameQueries, std::allocator<SameQueries> >(((std::vector<SameQueries>::size_type)i)).SameQueries::query_id’ does not have class type
ref_impl/core.cpp:265:58: error: unable to deduce ‘const auto’ from ‘<expression error>’
ref_impl/core.cpp:266:38: error: ‘queries.std::vector<_Tp, _Alloc>::operator[]<SameQueries, std::allocator<SameQueries> >(((std::vector<SameQueries>::size_type)i)).SameQueries::query_id’ does not have class type
ref_impl/core.cpp:267:32: error: ‘queries.std::vector<_Tp, _Alloc>::operator[]<SameQueries, std::allocator<SameQueries> >(((std::vector<SameQueries>::size_type)i)).SameQueries::query_id’ does not have class type
ref_impl/core.cpp:268:36: error: ‘queries.std::vector<_Tp, _Alloc>::operator[]<SameQueries, std::allocator<SameQueries> >(((std::vector<SameQueries>::size_type)i)).SameQueries::query_id’ does not have class type
ref_impl/core.cpp: In function ‘void* TaskCode(void*)’:
ref_impl/core.cpp:463:41: error: ‘quer.SameQueries::query_id’ does not have class type
ref_impl/core.cpp:463:48: error: unable to deduce ‘auto’ from ‘<expression error>’
ref_impl/core.cpp:463:70: error: ‘quer.SameQueries::query_id’ does not have class type
make[2]: *** [build/Release/GNU-Linux-x86/ref_impl/core.o] Error 1
make[2]: Leaving directory `/home/petros/NetBeansProjects/ACM_test'
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory `/home/petros/NetBeansProjects/ACM_test'
make: *** [.build-impl] Error 2


BUILD FAILED (exit value 2, total time: 1s)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-14 22:34:53

当它在一个结构体中时,应该是:

代码语言:javascript
复制
unordered_set<QueryID> query_id = unordered_set<QueryID>(109);

谢谢

票数 3
EN

Stack Overflow用户

发布于 2013-04-07 01:36:43

我怀疑水桶计数是在转移注意力。看起来QueryID是不可见的。

票数 0
EN

Stack Overflow用户

发布于 2013-04-07 01:41:33

我怀疑你的QueryID没有标准的构造函数,也就是QueryID::QueryID() { std::cout << "foo!" };,所以无序集不知道如何预先填充空的QueryID。

尝试添加一个。

或者,您可以使用第二个参数来设置用于每个预建存储桶的默认数据。

参考:http://en.cppreference.com/w/cpp/container/unordered_set/unordered_set

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15853756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档