moo*_*moo 3 boost unordered-map boost-variant c++11
有人可以告诉我,我如何获得boost :: Variant处理无序地图?
typedef boost::variant<long, string, double> lut_value;
unordered_map<lut_value, short> table;
我认为有一个用于boost :: variant的哈希函数,对吗?
编译器说:
./src/lookup/HashMap.o:在函数`std :: __ detail :: _ Hash_code_base中,std :: allocator>,double,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_ ,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail: :variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_, boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_>,std :: pair,std :: allocator>,double,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_> const,short>,std :: _ Select1st,std :: allocator>,double,boost :: detail :: variant :: void_, boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_> const,short>>,std :: equal_to,std :: allocator>,double,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_ ,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail: :variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_, boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_>>,std :: hash,std :: allocator>,double,boost: :detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost ::detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_>>,std :: __ detail :: _ Mod_range_hashing, std :: __ detail :: __ Default_ranged_hash,false> :: _ M_hash_code(boost :: variant,std :: allocator>,double,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_> const&)const': /usr/include/c++/4.6/bits/hashtable_policy.h:753:对`std :: hash,std :: allocator>的未定义引用,双精度,boost :: detail :: variant :: void_,boost :: detail: :variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_, boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_>> :: operator()(boost :: variant,std :: allocator>,double,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant ::void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_ ,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_>)const' ./src/lookup/HashMap.o:在函数`std :: __ detail :: _ Hash_code_base中,std :: allocator>,double,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_ ,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail: :variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_, boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_>,std :: pair,std :: allocator>,double,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_> const,short>,std :: _ Select1st,std :: allocator>,double,boost :: detail :: variant :: void_, boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_> const,short>>,std :: equal_to,std :: allocator>,double,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_ ,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail: :variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_, boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_>>,std :: hash,std :: allocator>,double,boost: :detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost ::detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_>>,std :: __ detail :: _ Mod_range_hashing, std :: __ detail :: _ Default_ranged_hash,false> :: _ M_bucket_index(std :: __ detail :: _ Hash_node,std :: allocator>,double,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_> const,short>,false> const *,unsigned long)const': /usr/include/c++/4.6/bits/hashtable_policy.h:763:对`std :: hash,std :: allocator>的未定义引用,双精度,boost :: detail :: variant :: void_,boost :: detail: :variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_, boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail ::变种::: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_>> :: operator()(boost :: variant,std :: allocator>,double,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant ::void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_ ,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_>)const'
是的,它需要一个哈希函数。你可以做:
#include <boost/functional/hash.hpp>
#include <boost/variant.hpp>
typedef boost::variant<long, std::string, double> lut_value;
std::unordered_map<lut_value, short, boost::hash<lut_value>> table;
Run Code Online (Sandbox Code Playgroud)