我有
std::unordered_map<std::wstring, std::vector<unsigned>> map;
当我尝试
map.find("asdf"sv)
我知道
error C2664: 'std::_List_const_iterator<std::_List_val<std::_List_simple_types<_Ty>>> std::_Hash<std::_Umap_traits<_Kty,std::vector<unsigned int,std::allocator<unsigned int>>,std::_Uhash_compare<_Kty,_Hasher,_Keyeq>,_Alloc,false>>::find(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>> &) const': cannot convert argument 1 from 'std::wstring_view' to 'const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>> &'
是否可以使用std :: wstring_view进行map.find()编译,或者至少在不构建std :: wstring的情况下进行搜索?
答案 0 :(得分:7)
您要执行的操作称为“异构查找”(基本上,地图的类型和您尝试用于查找的类型是不同的类型)。在C ++ 20中,多亏了P0919,我们将获得unordered_map::find()
的新重载,这些重载将使您尝试执行的工作得以实现。
直到那时,唯一相关的重载特别是Key const&
。 basic_string
的{{3}}是explicit
(请参阅#10)。因此,在C ++ 17中,您必须编写:
map.find("asdf"s)
或
map.find(std::string("asdf"sv));