std::pair作为unordered_map的key

pair作为unordered_map的key需要为pair添加hash函数

hash函数根据题意自己进行定义即可


struct pair_hash{
    template<class T1, class T2>
    std::size_t operator() (const std::pair<T1, T2>& p) const{
        auto h1 = std::hash<T1>{}(p.first);
        auto h2 = std::hash<T2>{}(p.second);
        return h1 ^ h2;
    }
};
unordered_map<pair<int, int>, int, pair_hash> mp;

 

^ /usr/include/c++/5/bits/unordered_map.h:111:46: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::key_equal key_equal; ^ /usr/include/c++/5/bits/unordered_map.h:112:51: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::allocator_type allocator_type; ^ /usr/include/c++/5/bits/unordered_map.h:117:45: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::pointer pointer; ^ /usr/include/c++/5/bits/unordered_map.h:118:50: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::const_pointer const_pointer; ^ /usr/include/c++/5/bits/unordered_map.h:119:47: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::reference reference; ^ /usr/include/c++/5/bits/unordered_map.h:120:52: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::const_reference const_reference; ^ /usr/include/c++/5/bits/unordered_map.h:121:46: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::iterator iterator; ^ /usr/include/c++/5/bits/unordered_map.h:122:51: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::const_iterator const_iterator; ^ /usr/include/c++/5/bits/unordered_map.h:123:51: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::local_iterator local_iterator; ^ /usr/include/c++/5/bits/unordered_map.h:124:57: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::const_local_iterator const_local_iterator; ^ /usr/include/c++/5/bits/unordered_map.h:125:47: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::size_type size_type; ^ /usr/include/c++/5/bits/unordered_map.h:126:52: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ typedef typename _Hashtable::difference_type difference_type; ^ /usr/include/c++/5/bits/unordered_map.h:280:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ operator=(initializer_list<value_type> __l) ^ /usr/include/c++/5/bits/unordered_map.h:379:2: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ emplace(_Args&&... __args) ^ /usr/include/c++/5/bits/unordered_map.h:432:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ insert(const value_type& __x) ^ /usr/include/c++/5/bits/unordered_map.h:439:2: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ insert(_Pair&& __x) ^ /usr/include/c++/5/bits/unordered_map.h:499:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ insert(initializer_list<value_type> __l) ^ /usr/include/c++/5/bits/unordered_map.h:645:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ equal_range(const key_type& __x) ^ /usr/include/c++/5/bits/unordered_map.h:649:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_data_precision> >, std::__detail::__is_noexcept_hash<raw_data_precision, std::hash<raw_data_precision> > > >’ equal_range(const key_type& __x) const ^ In file included from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:29:0, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_init.h:19, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos_ext/modules/amigos_module_sync.cpp:19: /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h: In static member function ‘static std::__cxx11::string ss_enum_cast<raw_data_precision>::to_str(const raw_data_precision&)’: /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:88:1: error: too many initializers for ‘const std::unordered_map<raw_data_precision, std::__cxx11::basic_string<char> >’ }); ^ /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/../common/ss_util/ss_enum_cast.hpp:38:73: note: in definition of macro ‘SS_ENUM_CAST_STR’ static const std::unordered_map<_EnumType, std::string> m = __VA_ARGS__; \ ^ /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/../common/ss_util/ss_enum_cast.hpp:40:25: error: ‘const class std::unordered_map<raw_data_precision, std::__cxx11::basic_string<char> >’ has no member named ‘find’ auto it = m.find(e); \ ^ /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:81:1: note: in expansion of macro ‘SS_ENUM_CAST_STR’ SS_ENUM_CAST_STR(raw_data_precision , { ^ /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/../common/ss_util/ss_enum_cast.hpp:41:28: error: ‘const class std::unordered_map<raw_data_precision, std::__cxx11::basic_string<char> >’ has no member named ‘end’ return it != m.end() ? it->second : "Unknown"; \ ^ /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:81:1: note: in expansion of macro ‘SS_ENUM_CAST_STR’ SS_ENUM_CAST_STR(raw_data_precision , { ^ In file included from /usr/include/c++/5/bits/hashtable.h:35:0, from /usr/include/c++/5/unordered_map:47, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:25, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_init.h:19, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos_ext/modules/amigos_module_sync.cpp:19: /usr/include/c++/5/bits/hashtable_policy.h: In instantiation of ‘struct std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> >’: /usr/include/c++/5/type_traits:137:12: required from ‘struct std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > >’ /usr/include/c++/5/type_traits:148:38: required from ‘struct std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ /usr/include/c++/5/bits/unordered_map.h:100:66: required from ‘class std::unordered_map<raw_video_fmt, std::__cxx11::basic_string<char> >’ /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:107:69: required from here /usr/include/c++/5/bits/hashtable_policy.h:85:34: error: no match for call to ‘(const std::hash<raw_video_fmt>) (const raw_video_fmt&)’ noexcept(declval<const _Hash&>()(declval<const _Key&>()))> ^ In file included from /usr/include/c++/5/bits/move.h:57:0, from /usr/include/c++/5/bits/stl_pair.h:59, from /usr/include/c++/5/bits/stl_algobase.h:64, from /usr/include/c++/5/deque:60, from /usr/include/c++/5/queue:60, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:20, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_init.h:19, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos_ext/modules/amigos_module_sync.cpp:19: /usr/include/c++/5/type_traits: In instantiation of ‘struct std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’: /usr/include/c++/5/bits/unordered_map.h:100:66: required from ‘class std::unordered_map<raw_video_fmt, std::__cxx11::basic_string<char> >’ /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:107:69: required from here /usr/include/c++/5/type_traits:148:38: error: ‘value’ is not a member of ‘std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > >’ : public integral_constant<bool, !_Pp::value> ^ In file included from /usr/include/c++/5/unordered_map:48:0, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:25, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_init.h:19, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos_ext/modules/amigos_module_sync.cpp:19: /usr/include/c++/5/bits/unordered_map.h: In instantiation of ‘class std::unordered_map<raw_video_fmt, std::__cxx11::basic_string<char> >’: /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:107:69: required from here /usr/include/c++/5/bits/unordered_map.h:100:66: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; ^ /usr/include/c++/5/bits/unordered_map.h:107:45: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::key_type key_type; ^ /usr/include/c++/5/bits/unordered_map.h:108:47: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::value_type value_type; ^ /usr/include/c++/5/bits/unordered_map.h:109:48: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::mapped_type mapped_type; ^ /usr/include/c++/5/bits/unordered_map.h:110:43: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::hasher hasher; ^ /usr/include/c++/5/bits/unordered_map.h:111:46: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::key_equal key_equal; ^ /usr/include/c++/5/bits/unordered_map.h:112:51: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::allocator_type allocator_type; ^ /usr/include/c++/5/bits/unordered_map.h:117:45: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::pointer pointer; ^ /usr/include/c++/5/bits/unordered_map.h:118:50: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::const_pointer const_pointer; ^ /usr/include/c++/5/bits/unordered_map.h:119:47: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::reference reference; ^ /usr/include/c++/5/bits/unordered_map.h:120:52: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::const_reference const_reference; ^ /usr/include/c++/5/bits/unordered_map.h:121:46: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::iterator iterator; ^ /usr/include/c++/5/bits/unordered_map.h:122:51: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::const_iterator const_iterator; ^ /usr/include/c++/5/bits/unordered_map.h:123:51: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::local_iterator local_iterator; ^ /usr/include/c++/5/bits/unordered_map.h:124:57: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::const_local_iterator const_local_iterator; ^ /usr/include/c++/5/bits/unordered_map.h:125:47: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::size_type size_type; ^ /usr/include/c++/5/bits/unordered_map.h:126:52: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ typedef typename _Hashtable::difference_type difference_type; ^ /usr/include/c++/5/bits/unordered_map.h:280:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ operator=(initializer_list<value_type> __l) ^ /usr/include/c++/5/bits/unordered_map.h:379:2: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ emplace(_Args&&... __args) ^ /usr/include/c++/5/bits/unordered_map.h:432:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ insert(const value_type& __x) ^ /usr/include/c++/5/bits/unordered_map.h:439:2: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ insert(_Pair&& __x) ^ /usr/include/c++/5/bits/unordered_map.h:499:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ insert(initializer_list<value_type> __l) ^ /usr/include/c++/5/bits/unordered_map.h:645:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ equal_range(const key_type& __x) ^ /usr/include/c++/5/bits/unordered_map.h:649:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<raw_video_fmt> >, std::__detail::__is_noexcept_hash<raw_video_fmt, std::hash<raw_video_fmt> > > >’ equal_range(const key_type& __x) const ^ In file included from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_init.h:19:0, from /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos_ext/modules/amigos_module_sync.cpp:19: /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h: In static member function ‘static std::__cxx11::string ss_enum_cast<raw_video_fmt>::to_str(const raw_video_fmt&)’: /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:126:9: error: too many initializers for ‘const std::unordered_map<raw_video_fmt, std::__cxx11::basic_string<char> >’ }; ^ /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:127:21: error: ‘const class std::unordered_map<raw_video_fmt, std::__cxx11::basic_string<char> >’ has no member named ‘find’ auto it = m.find(fmt); ^ /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos/amigos_base/amigos_module_base.h:128:24: error: ‘const class std::unordered_map<raw_video_fmt, std::__cxx11::basic_string<char> >’ has no member named ‘end’ return it != m.end() ? it->second : "Unknown"; ^ /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/build/compile.mk:114: recipe for target '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos_ext/modules/amigos_module_rtsp.user.x86.o' failed make[12]: *** [/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos_ext/modules/amigos_module_rtsp.user.x86.o] Error 1 /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/build/compile.mk:114: recipe for target '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos_ext/modules/amigos_module_env_monitor.user.x86.o' failed make[12]: *** [/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos_ext/modules/amigos_module_env_monitor.user.x86.o] Error 1 /home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/build/compile.mk:114: recipe for target '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos_ext/modules/amigos_module_sync.user.x86.o' failed make[12]: *** [/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code/libraries/amigos_ext/modules/amigos_module_sync.user.x86.o] Error 1 make[12]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code' Makefile:182: recipe for target 'libraries/amigos_ext_obj_all' failed make[11]: *** [libraries/amigos_ext_obj_all] Error 2 make[11]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code' Makefile:143: recipe for target 'depend_internal' failed make[10]: *** [depend_internal] Error 2 make[10]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code' Makefile:99: recipe for target 'all' failed make[9]: *** [all] Error 2 make[9]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code' Makefile:167: recipe for target 'applications/mixer/app_amigos/gen_code' failed make[8]: *** [applications/mixer/app_amigos/gen_code] Error 2 make[8]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code' applications/mixer/app_amigos/gen_code/script.mk:41: recipe for target 'script_start' failed make[7]: *** [script_start] Error 2 make[7]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code' Makefile:207: recipe for target 'applications/mixer/app_amigos/gen_code_script_start' failed make[6]: *** [applications/mixer/app_amigos/gen_code_script_start] Error 2 make[6]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code' Makefile:99: recipe for target 'all' failed make[5]: *** [all] Error 2 make[5]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify/sample_code' makefile:46: recipe for target 'all' failed make[4]: *** [all] Error 2 make[4]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/sdk/verify' ../sdk/sdk.mk:81: recipe for target 'verify' failed make[3]: *** [verify] Error 2 make[3]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/project' ../sdk/sdk.mk:49: recipe for target 'sdk' failed make[2]: *** [sdk] Error 2 make[2]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/project' makefile:279: recipe for target 'release' failed make[1]: *** [release] Error 2 make[1]: Leaving directory '/home/tp/Project/AOV-课题/软件sdk/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1/SourceCode/project' makefile:68: recipe for target 'image' failed make: *** [image] Error 2 问题在哪
09-16
<think>好的,我现在需要分析用户提供的编译错误日志,并找出问题所在。用户给出的错误信息非常详细,看起来是C++代码中的模板实例化问题,特别是与`std::unordered_map`相关的错误。首先,我需要理解这些错误信息的具体含义,然后定位到可能的代码问题。 首先,错误信息中多次出现“‘value’ is not a member of ‘std::__not_<...>’”,这表明在实例化`std::unordered_map`时,编译器在类型特征检查过程中遇到了问题。具体来说,`std::unordered_map`的实现依赖于某些类型特征,比如哈希函数是否为noexcept,或者是否是快速哈希函数。当这些特征无法正确判断时,就会导致编译错误。 接下来,错误信息中提到了两个枚举类型`raw_data_precision`和`raw_video_fmt`作为`unordered_map`的键类型。用户代码中可能没有为这两个枚举类型提供适当的哈希函数或比较函数,导致编译器无法正确生成哈希表所需的代码。 然后,注意到具体的错误位置是在`amigos_module_base.h`文件中,第88行和第126行附近,涉及使用`unordered_map`的初始化。用户可能在这里定义了基于枚举类型的映射,并且没有正确提供哈希函数或比较函数。 此外,错误信息中还提到了`no match for call to ‘(const std::hash<raw_data_precision>) (const raw_data_precision&)’`,这表明编译器尝试使用`std::hash`对枚举类型进行哈希运算,但该特化版本不存在,导致编译失败。 综合这些信息,问题的根本原因应该是用户在代码中使用了自定义的枚举类型作为`std::unordered_map`的键,但没有为这些枚举类型提供哈希函数的特化版本。C++标准库的`unordered_map`需要键类型具有哈希函数和相等比较函数,而默认情况下,枚举类型没有特化的`std::hash`,所以需要用户自己提供。 接下来,我需要验证这个假设是否正确。用户是否在代码中为`raw_data_precision`和`raw_video_fmt`提供了哈希函数?根据错误信息,显然没有,所以编译器尝试使用默认的`std::hash`,这导致了错误。 此外,错误信息中的`too many initializers`可能是因为在初始化`unordered_map`时,初始化列表中的元素数量超过了预期,这可能与之前的编译错误有关,导致编译器无法正确解析初始化列表的结构。 总结问题所在: 1. 缺少自定义枚举类型的哈希函数特化。 2. `unordered_map`的使用需要键类型满足可哈希的要求,用户未满足这一条件。 解决方案应该是为`raw_data_precision`和`raw_video_fmt`枚举类型提供`std::hash`的特化版本,或者在定义`unordered_map`时显式指定哈希函数和比较函数。 </think>从编译日志来看,核心问题在于 **使用自定义枚举类型作为 `std::unordered_map` 的键时未提供哈希函数特化**,导致编译器无法正确实例化模板。以下是详细分析及解决方案: --- ### **1. 核心错误原因** - **枚举类型未特化 `std::hash`** 错误信息中反复出现: ``` error: no match for call to ‘(const std::hash<raw_data_precision>) (const raw_data_precision&)’ ``` 表明编译器尝试调用 `std::hash<raw_data_precision>`,但标准库未提供该枚举类型的特化版本。 - **`unordered_map` 实例化失败** `unordered_map` 要求键类型必须满足: - 可调用 `hasher`(默认为 `std::hash<Key>`) - 提供相等比较函数 `key_equal`(默认为 `std::equal_to<Key>`) 由于未提供 `raw_data_precision` 和 `raw_video_fmt` 的哈希特化,模板实例化失败。 - **初始化器过多** ``` error: too many initializers for ‘const std::unordered_map<raw_data_precision, std::__cxx11::basic_string<char> >’ ``` 此错误是连锁反应,因前序模板参数推导失败导致编译器无法正确解析初始化列表。 --- ### **2. 解决方案** #### **步骤 1:为枚举类型特化 `std::hash`** 在代码中添加对 `raw_data_precision` 和 `raw_video_fmt` 的 `std::hash` 特化: ```cpp #include <unordered_map> // 假设枚举定义如下: enum class raw_data_precision { /* 枚举值 */ }; enum class raw_video_fmt { /* 枚举值 */ }; // 特化 std::hash namespace std { template<> struct hash<raw_data_precision> { size_t operator()(const raw_data_precision& key) const { return static_cast<size_t>(key); // 或使用更复杂的哈希算法 } }; template<> struct hash<raw_video_fmt> { size_t operator()(const raw_video_fmt& key) const { return static_cast<size_t>(key); // 或使用更复杂的哈希算法 } }; } ``` #### **步骤 2:指定哈希比较函数(如需)** 如果枚举类型需要自定义相等比较逻辑,需提供 `key_equal`: ```cpp struct EnumEqual { bool operator()(raw_data_precision a, raw_data_precision b) const { return a == b; } }; using MyMap = std::unordered_map<raw_data_precision, std::string, std::hash<raw_data_precision>, EnumEqual>; ``` #### **步骤 3:修复初始化逻辑** 确保 `unordered_map` 的初始化器与类型匹配: ```cpp // 示例修复 const std::unordered_map<raw_data_precision, std::string> myMap = { {raw_data_precision::Value1, "Value1"}, {raw_data_precision::Value2, "Value2"} }; ``` --- ### **3. 其他注意事项** - **枚举作用域**:若使用 `enum class`,需确保特化 `std::hash` 在 `std` 命名空间内。 - **哈希冲突**:直接转换为 `size_t` 可能导致哈希冲突,需根据实际枚举值分布优化哈希函数。 - **编译器兼容性**:不同编译器对模板特化的支持可能有差异,建议测试不同环境。 --- ### **4. 验证步骤** 1. 添加上述特化代码到头文件(如 `amigos_module_base.h`)。 2. 清理并重新编译: ```bash make clean && make ``` 3. 确认错误消失,若仍有问题,检查枚举定义与特化是否匹配。 --- ### **结论** 问题根源是自定义枚举类型未提供 `std::hash` 特化,导致 `unordered_map` 实例化失败。通过特化哈希函数或显式指定哈希策略可解决此问题。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值