char和char&呼叫

时间:2016-06-23 09:59:08

标签: c++ c++11

为了比较两个字符串是否包含相同的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)’

我不太明白我能在这做什么。希望有人可以帮忙!

2 个答案:

答案 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 << ' ';
}

std::set

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