Question

For an unordered_map i set the initial bucket count by this:

unordered_map<string, dictionaryWord> dictionary(17749); // set initial bucket count to 17749

This way does not seem to work for unordered_set.

/*line 150*/ unsigned char mask;
/*line 151*/ unordered_set<QueryID> query_id(109); // set initial bucket count to 109

Compiler error = 1) expected identifier before numeric constant. 2) expected ‘,’ or ‘...’ before numeric constant. And goes on with a bunch of errors

How to do the same thing for an unordered_set?

Thank you.

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

There are no errors if i remove "(109)"

"/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)
Was it helpful?

Solution

It was inside a struct. It should have been:

unordered_set<QueryID> query_id = unordered_set<QueryID>(109);

Thank you

OTHER TIPS

I suspect the bucket count is a red herring. It looks like QueryID is not visible.

I suspect your QueryID has no standard constructor ie QueryID::QueryID() { std::cout << "foo!" }; so the unordered set does not know how to prefill with empty QueryIDs.

Try adding one.

Or you can use the second parameter to set default data to be used for every prebuilt bucket.

Reference: http://en.cppreference.com/w/cpp/container/unordered_set/unordered_set

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top