【问题标题】:Boost::variant with unordered mapBoost::variant 与无序映射
【发布时间】:2013-08-02 16:52:02
【问题描述】:

谁能告诉我,我如何才能让 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::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>, 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::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::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: :变量::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, f另外>::_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::variant::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 >, 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_> >::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::voi d_, 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::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>, 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::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::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: :变量::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, f另外>::_M_bucket_index(std::__detail::_Hash_node, std::allocator >, double, 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::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 >, 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_> >::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::voi d_, 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'

【问题讨论】:

    标签: boost c++11 unordered-map boost-variant


    【解决方案1】:

    是的,它需要一个哈希函数。你可以这样做:

    #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;
    

    【讨论】:

    猜你喜欢
    • 2020-12-12
    • 2012-09-06
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2016-11-18
    相关资源
    最近更新 更多