Dictionary wxwidgets的良好字典类型

Dictionary wxwidgets的良好字典类型,dictionary,wxwidgets,Dictionary,Wxwidgets,与wxWidgets一起使用的好词典类型是什么? 框架中是否存在这样的类型? 我应该坚持使用数组吗?我尝试了无序的_映射,但给出了wxString类型的错误 #include <unordered_map> std::unordered_map<wxString,int>mapsi; mapsi={ {"first",1}, {"second",2}, }; #包括 std::无序地图; 马普西={ {“第一”,1}, {“第二”,2}, }; 错误: In

与wxWidgets一起使用的好词典类型是什么? 框架中是否存在这样的类型? 我应该坚持使用数组吗?我尝试了无序的_映射,但给出了wxString类型的错误

#include <unordered_map>
std::unordered_map<wxString,int>mapsi;

mapsi={
  {"first",1},
  {"second",2},
};
#包括
std::无序地图;
马普西={
{“第一”,1},
{“第二”,2},
};
错误:

In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hash
table.h:35:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\unordered
_map:47,
                 from E:\bootsi\New folder\TEST.cpp:9:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable_policy.h: In ins
tantiation of 'struct std::__detail::_Hash_code_base<wxString, std::pair<const w
xString, int>, std::__detail::_Select1st, std::hash<wxString>, std::__detail::_M
od_range_hashing, std::__detail::_Default_ranged_hash, true>':
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable_policy.h:1402:10
:   required from 'struct std::__detail::_Hashtable_base<wxString, std::pair<con
st wxString, int>, std::__detail::_Select1st, std::equal_to<wxString>, std::hash
<wxString>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_ha
sh, std::__detail::_Hashtable_traits<true, false, true> >'
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable.h:174:11:   requ
ired from 'class std::_Hashtable<wxString, std::pair<const wxString, int>, std::
allocator<std::pair<const wxString, int> >, std::__detail::_Select1st, std::equa
l_to<wxString>, std::hash<wxString>, std::__detail::_Mod_range_hashing, std::__d
etail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail:
:_Hashtable_traits<true, false, true> >'
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\unordered_map.h:100:18:
required from 'class std::unordered_map<wxString, int>'
E:\bootsi\New folder\TEST.cpp:96:34:   required from here
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable_policy.h:1070:12
: error: invalid use of incomplete type 'struct std::hash<wxString>'
     struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,
            ^
In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\basi
c_string.h:3033:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\string:52
,
                 from D:/build/wxWidgets-3.0.1/include/wx/stringimpl.h:66,
                 from D:/build/wxWidgets-3.0.1/include/wx/unichar.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/strvararg.h:22,
                 from D:/build/wxWidgets-3.0.1/include/wx/string.h:46,
                 from D:/build/wxWidgets-3.0.1/include/wx/memory.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/object.h:19,
                 from D:/build/wxWidgets-3.0.1/include/wx/wx.h:15,
                 from E:\bootsi\New folder\TEST.cpp:5:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\functional_hash.h:58:12: e
rror: declaration of 'struct std::hash<wxString>'
     struct hash;
            ^
In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hash
table.h:35:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\unordered
_map:47,
                 from E:\bootsi\New folder\TEST.cpp:9:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable_policy.h:1070:12
: error: invalid use of incomplete type 'struct std::hash<wxString>'
     struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,
            ^
In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\basi
c_string.h:3033:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\string:52
,
                 from D:/build/wxWidgets-3.0.1/include/wx/stringimpl.h:66,
                 from D:/build/wxWidgets-3.0.1/include/wx/unichar.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/strvararg.h:22,
                 from D:/build/wxWidgets-3.0.1/include/wx/string.h:46,
                 from D:/build/wxWidgets-3.0.1/include/wx/memory.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/object.h:19,
                 from D:/build/wxWidgets-3.0.1/include/wx/wx.h:15,
                 from E:\bootsi\New folder\TEST.cpp:5:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\functional_hash.h:58:12: e
rror: declaration of 'struct std::hash<wxString>'
     struct hash;
            ^
In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hash
table.h:35:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\unordered
_map:47,
                 from E:\bootsi\New folder\TEST.cpp:9:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable_policy.h:1082:53
: error: invalid use of incomplete type 'struct std::hash<wxString>'
       using __ebo_h1 = _Hashtable_ebo_helper<1, _H1>;
       In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\basi
c_string.h:3033:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\string:52
,
                 from D:/build/wxWidgets-3.0.1/include/wx/stringimpl.h:66,
                 from D:/build/wxWidgets-3.0.1/include/wx/unichar.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/strvararg.h:22,
                 from D:/build/wxWidgets-3.0.1/include/wx/string.h:46,
                 from D:/build/wxWidgets-3.0.1/include/wx/memory.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/object.h:19,
                 from D:/build/wxWidgets-3.0.1/include/wx/wx.h:15,
                 from E:\bootsi\New folder\TEST.cpp:5:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\functional_hash.h:58:12: e
rror: declaration of 'struct std::hash<wxString>'
     struct hash;
            ^
In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hash
table.h:35:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\unordered
_map:47,
                 from E:\bootsi\New folder\TEST.cpp:9:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable_policy.h:1082:53
: error: invalid use of incomplete type 'struct std::hash<wxString>'
       using __ebo_h1 = _Hashtable_ebo_helper<1, _H1>;
                                                     ^
In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\basi
c_string.h:3033:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\string:52
,
                 from D:/build/wxWidgets-3.0.1/include/wx/stringimpl.h:66,
                 from D:/build/wxWidgets-3.0.1/include/wx/unichar.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/strvararg.h:22,
                 from D:/build/wxWidgets-3.0.1/include/wx/string.h:46,
                 from D:/build/wxWidgets-3.0.1/include/wx/memory.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/object.h:19,
                 from D:/build/wxWidgets-3.0.1/include/wx/wx.h:15,
                 from E:\bootsi\New folder\TEST.cpp:5:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\functional_hash.h:58:12: e
rror: declaration of 'struct std::hash<wxString>'
     struct hash;
            ^
E:\bootsi\New folder\TEST.cpp: In constructor 'std::unordered_map<_Key,
 _Tp, _Hash, _Pred, _Alloc>::unordered_map(std::unordered_map<_Key, _Tp, _Hash,
_Pred, _Alloc>::size_type, const hasher&, const key_equal&, const allocator_type
&) [with _Key = wxString; _Tp = int; _Hash = std::hash<wxString>; _Pred = std::e
qual_to<wxString>; _Alloc = std::allocator<std::pair<const wxString, int> >; std
::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::size_type = unsigned int; std:
:unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::hasher = std::hash<wxString>; s
td::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::key_equal = std::equal_to<wx
String>; std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::allocator_type = s
td::allocator<std::pair<const wxString, int> >]':
E:\bootsi\New folder\TEST.cpp:96:34: error: invalid use of incomplete t
ype 'std::unordered_map<wxString, int>::hasher {aka struct std::hash<wxString>}'

  std::unordered_map<wxString,int>mapsi;
                                  ^
In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\basi
c_string.h:3033:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\string:52
,
                 from D:/build/wxWidgets-3.0.1/include/wx/stringimpl.h:66,
                 from D:/build/wxWidgets-3.0.1/include/wx/unichar.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/strvararg.h:22,
                 from D:/build/wxWidgets-3.0.1/include/wx/string.h:46,
                 from D:/build/wxWidgets-3.0.1/include/wx/memory.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/object.h:19,
                 from D:/build/wxWidgets-3.0.1/include/wx/wx.h:15,
                 from E:\bootsi\New folder\TEST.cpp:5:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\functional_hash.h:58:12: e
rror: declaration of 'std::unordered_map<wxString, int>::hasher {aka struct std:
:hash<wxString>}'
     struct hash;

E:\bootsi\New folder\TEST.cpp:96:34: note:   when instantiating default
 argument for call to std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::unord
ered_map(std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::size_type, const h
asher&, const key_equal&, const allocator_type&) [with _Key = wxString; _Tp = in
t; _Hash = std::hash<wxString>; _Pred = std::equal_to<wxString>; _Alloc = std::a
llocator<std::pair<const wxString, int> >; std::unordered_map<_Key, _Tp, _Hash,
_Pred, _Alloc>::size_type = unsigned int; std::unordered_map<_Key, _Tp, _Hash, _
Pred, _Alloc>::hasher = std::hash<wxString>; std::unordered_map<_Key, _Tp, _Hash
, _Pred, _Alloc>::key_equal = std::equal_to<wxString>; std::unordered_map<_Key,
_Tp, _Hash, _Pred, _Alloc>::allocator_type = std::allocator<std::pair<const wxSt
ring, int> >]
  std::unordered_map<wxString,int>mapsi;
                                  ^
E:\bootsi\New folder\TEST.cpp: At global scope:
E:\bootsi\New folder\TEST.cpp:149:19: error: expected constructor, dest
ructor, or type conversion before ';' token
  CreateStatusBar();
                   ^
E:\bootsi\New folder\TEST.cpp:150:15: error: expected constructor, dest
ructor, or type conversion before '(' token
  SetStatusText("Welcome to wxWidgets!");
               ^
E:\bootsi\New folder\TEST.cpp:151:1: error: expected declaration before
 '}' token
 }
 ^
In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hash
table.h:35:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\unordered
_map:47,
                 from E:\bootsi\New folder\TEST.cpp:9:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable_policy.h: In ins
tantiation of 'std::__detail::_Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H
2, std::__detail::_Default_ranged_hash, true>::_Hash_code_base(const _ExtractKey
&, const _H1&, const _H2&, const std::__detail::_Default_ranged_hash&) [with _Ke
y = wxString; _Value = std::pair<const wxString, int>; _ExtractKey = std::__deta
il::_Select1st; _H1 = std::hash<wxString>; _H2 = std::__detail::_Mod_range_hashi
ng]':
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable_policy.h:1463:65
:   required from 'std::__detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Eq
ual, _H1, _H2, _Hash, _Traits>::_Hashtable_base(const _ExtractKey&, const _H1&,
const _H2&, const _Hash&, const _Equal&) [with _Key = wxString; _Value = std::pa
ir<const wxString, int>; _ExtractKey = std::__detail::_Select1st; _Equal = std::
equal_to<wxString>; _H1 = std::hash<wxString>; _H2 = std::__detail::_Mod_range_h
ashing; _Hash = std::__detail::_Default_ranged_hash; _Traits = std::__detail::_H
ashtable_traits<true, false, true>]'
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable.h:828:24:   requ
ired from 'std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::_Hashtable(std::_Hashtable<_Key, _Value, _Alloc,
 _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::size_type, const
 _H1&, const _H2&, const _Hash&, const _Equal&, const _ExtractKey&, const alloca
tor_type&) [with _Key = wxString; _Value = std::pair<const wxString, int>; _Allo
c = std::allocator<std::pair<const wxString, int> >; _ExtractKey = std::__detail
::_Select1st; _Equal = std::equal_to<wxString>; _H1 = std::hash<wxString>; _H2 =
 std::__detail::_Mod_range_hashing; _Hash = std::__detail::_Default_ranged_hash;
 _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_
Hashtable_traits<true, false, true>; std::_Hashtable<_Key, _Value, _Alloc, _Extr
actKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::size_type = unsigned i
nt; std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash,
_RehashPolicy, _Traits>::allocator_type = std::allocator<std::pair<const wxStrin
g, int> >]'
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable.h:397:26:   requ
ired from 'std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2,
_Hash, _RehashPolicy, _Traits>::_Hashtable(std::_Hashtable<_Key, _Value, _Alloc,
 _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::size_type, const
 _H1&, const key_equal&, const allocator_type&) [with _Key = wxString; _Value =
std::pair<const wxString, int>; _Alloc = std::allocator<std::pair<const wxString
, int> >; _ExtractKey = std::__detail::_Select1st; _Equal = std::equal_to<wxStri
ng>; _H1 = std::hash<wxString>; _H2 = std::__detail::_Mod_range_hashing; _Hash =
 std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_reha
sh_policy; _Traits = std::__detail::_Hashtable_traits<true, false, true>; std::_
Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPol
icy, _Traits>::size_type = unsigned int; std::_Hashtable<_Key, _Value, _Alloc, _
ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::key_equal = std::e
qual_to<wxString>; std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H
1, _H2, _Hash, _RehashPolicy, _Traits>::allocator_type = std::allocator<std::pai
r<const wxString, int> >]'
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\unordered_map.h:142:35:
required from 'std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::unordered_ma
p(std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::size_type, const hasher&,
 const key_equal&, const allocator_type&) [with _Key = wxString; _Tp = int; _Has
h = std::hash<wxString>; _Pred = std::equal_to<wxString>; _Alloc = std::allocato
r<std::pair<const wxString, int> >; std::unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc>::size_type = unsigned int; std::unordered_map<_Key, _Tp, _Hash, _Pred, _
Alloc>::hasher = std::hash<wxString>; std::unordered_map<_Key, _Tp, _Hash, _Pred
, _Alloc>::key_equal = std::equal_to<wxString>; std::unordered_map<_Key, _Tp, _H
ash, _Pred, _Alloc>::allocator_type = std::allocator<std::pair<const wxString, i
nt> >]'
E:\bootsi\New folder\TEST.cpp:96:34:   required from here
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable_policy.h:1099:63
: error: invalid use of incomplete type 'struct std::hash<wxString>'
       : __ebo_extract_key(__ex), __ebo_h1(__h1), __ebo_h2(__h2) { }
                                                               ^
In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\basi
c_string.h:3033:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\string:52
,
                 from D:/build/wxWidgets-3.0.1/include/wx/stringimpl.h:66,
                 from D:/build/wxWidgets-3.0.1/include/wx/unichar.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/strvararg.h:22,
                 from D:/build/wxWidgets-3.0.1/include/wx/string.h:46,
                 from D:/build/wxWidgets-3.0.1/include/wx/memory.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/object.h:19,
                 from D:/build/wxWidgets-3.0.1/include/wx/wx.h:15,
                 from E:\bootsi\New folder\TEST.cpp:5:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\functional_hash.h:58:12: e
rror: declaration of 'struct std::hash<wxString>'
     struct hash;
            ^
In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hash
table.h:35:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\unordered
_map:47,
                 from E:\bootsi\New folder\TEST.cpp:9:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable_policy.h:1099:63
: error: invalid use of incomplete type 'struct std::hash<wxString>'
       : __ebo_extract_key(__ex), __ebo_h1(__h1), __ebo_h2(__h2) { }
                                                               ^
In file included from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\basi
c_string.h:3033:0,
                 from d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\string:52
,
                 from D:/build/wxWidgets-3.0.1/include/wx/stringimpl.h:66,
                 from D:/build/wxWidgets-3.0.1/include/wx/unichar.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/strvararg.h:22,
                 from D:/build/wxWidgets-3.0.1/include/wx/string.h:46,
                 from D:/build/wxWidgets-3.0.1/include/wx/memory.h:15,
                 from D:/build/wxWidgets-3.0.1/include/wx/object.h:19,
                 from D:/build/wxWidgets-3.0.1/include/wx/wx.h:15,
                 from E:\bootsi\New folder\TEST.cpp:5:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\functional_hash.h:58:12: e
rror: declaration of 'struct std::hash<wxString>'
     struct hash;
在d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hash中包含的文件中
表h:35:0,
来自d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\unordered
_地图:47,
来自E:\bootsi\New folder\TEST.cpp:9:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable\u policy.h:在ins中
“struct std::__detail::_Hash_code_base”的转换:
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable\u policy.h:1402:10
:从“结构标准::\详细信息::\哈希表\基础”中需要
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable.h:174:11:requ
ired来自“类std::\u哈希表”
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\unordered_map.h:100:18:
“类std::无序映射”中需要
E:\bootsi\New folder\TEST.cpp:96:34:此处为必填项
d:\build\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\hashtable\u policy.h:1070:12
:错误:不完整类型“struct std::hash”的使用无效
结构\u散列\u代码\u基始终存在

要在无序的_映射中使用wxString,需要为wxString提供一个哈希函数。使用std::wstring可能更简单

因此,您可以选择:

  • 使用wxHashMap,它可以立即支持wxString,但不能支持所有最新的C+11
  • 将无序_映射与自制的wxString哈希函数一起使用
  • 将无序_映射与std::wstring一起使用。您必须在wxString和std::wstring之间进行转换,但将获得对C++11的完全支持
  • wxWidgets v3.1.0的等待

  • 我推荐选项#3,现在

    由于这个问题,wxWidgets 3.1.0将具有
    std::hash
    专门化(请参阅,因此您的示例应该是开箱即用的。

    确切的错误是什么?请尝试
    wxT(“第一”)
    -只是一个猜测。即使我没有初始化,我也会收到这些错误,但我还是不可能有用于初始化的内联语法。
    WX_DECLARE_STRING_HASH_MAP( int,     // type of the values
                                myMapType); // name of the class
    
    myMapType myMap;
    myMap["test"]=321;