为了比较两个字符串是否包含相同的char,我试图遍历字符串a并将字符放入映射中。
所以这就是我所做的。
string a = "abc";
unordered_map<char,int> m;
for (auto i:a){
m.insert(i,1);
}
但是有一个错误:
no matching function for call to ‘std::unordered_map<char, int>::insert(char&, int)’
我不太明白我能在这做什么。希望有人可以帮忙!
答案 0 :(得分:1)
您的代码中的问题是您尝试将a
std::unordered_map<char, int>
插入i
- 您应该插入char
{{1} (来自char
的每个std::string a
)。
此外,即使您正确使用
m.insert(a,1);
它不会编译,因为std::string
从模板类型接受std::unordered_map::insert
而不是2个参数。所以你需要:
std::unordered_map<char, int> char_map;
char_map.insert(std::make_pair(c, 1));
想要实现可以用std::pair
完成(如果你不关心对象的顺序 - 字符 - 存储在其中)
#include <iostream>
#include <string>
#include <unordered_set>
int main()
{
std::string a = "abc";
std::unordered_set<char> char_set;
for (auto c : a)
char_set.insert(c);
for (auto c : char_set)
std::cout << c << ' ';
}
答案 1 :(得分:0)
很遗憾,您需要先致电std::make_pair
:
#include <iostream>
#include <unordered_map>
int main()
{
std::string a = "abc";
std::unordered_map<char,int> m;
for (int i = 0; i < a.size(); ++i)
m.insert(std::make_pair(a[i],1));
}