如何通过std :: unordered_map <std :: wstring,t =“”>中的std :: wstring_view类型的键查找?

时间:2019-01-11 17:54:04

标签: c++ c++17

我有

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的情况下进行搜索?

1 个答案:

答案 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));