在C ++ STL中搜索映射中的键时,出现以下错误

时间:2019-07-02 08:50:47

标签: c++ stl maps

我创建了一个Map,键为字符串类型,关联值存储在vector中。现在我有了一个字符串,需要检查字符串中的每个字符是否在映射中作为键出现。

#include <iostream>
#include <stdlib.h>
#include <vector>
#include <map>
#include <string>
using namespace std;

int main() {
   map<string, vector<string>> umap;
   umap["1"] = {"a","b","c"};
   umap["2"] = {"d","e","f"};
   string s = "23";
   for(int i=0; i<s.length(); i++) {
      if(umap.find(s[i]) != umap.end()) 
          cout<<"Present"<<endl;
      else
          cout<<"Not Present"<<endl;
      }
}

错误:

main.cpp: In function ‘int main()’:
main.cpp:15:26: error: no matching function for call to ‘std::map<std::__cxx11::basic_string<char>, std::vector<std::__cxx11::basic_string<char> > >::find(__gnu_cxx::__alloc_traits<std::allocator<char> >::value_type&)’
         if(umap.find(s[i]) != umap.end())

1 个答案:

答案 0 :(得分:4)

该错误可能有点神秘。让我们将其翻译为人类可读的内容。

main.cpp: In function ‘int main()’:
main.cpp:15:26: error: no matching function for call to ‘std::map<std::__cxx11::basic_string<char>, std::vector<std::__cxx11::basic_string<char> > >::find(__gnu_cxx::__alloc_traits<std::allocator<char> >::value_type&)’
         if(umap.find(s[i]) != umap.end())

第一个std::__cxx11::basic_string<char>是表示std::string的一种复杂方法。那么__gnu_cxx::__alloc_traits<std::allocator<char> >::value_type&是表示s[i]的返回类型的一种更为复杂的方法,实际上它只是char&。放在一起,我们得到

main.cpp: In function ‘int main()’:
main.cpp:15:26: error: no matching function for call to ‘std::map<std::string, std::vector<std::string> >::find(char&)’
         if(umap.find(s[i]) != umap.end())

我希望现在您可以看到该错误抱怨没有find作为参数的char&重载。

相反,您应该通过std::string传递s.substr(i,1)