2016-06-23 32 views
-2

爲了比較兩個字符串是否包含相同的字符,我試圖通過字符串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

'i'是你的字符,而不是'a'。 – tkausl

+4

C++已經設置了'std :: set'和'std :: unordered_set'。 – 101010

+3

嘗試[橡皮鴨調試](https://en.wikipedia.org/wiki/Rubber_duck_debugging)。 –

回答

1

在你的代碼的問題是,你嘗試插入a這是一個std::stringstd::unordered_map<char, int> - 你應該插入i這是一個char(分別來自std::string achar)。

而且,即使你使用正確

m.insert(a,1); 

它不會編譯,因爲std::unordered_map::insert接受來自模板類型std::pair不是2個參數。所以,你將需要:

std::unordered_map<char, int> char_map; 
char_map.insert(std::make_pair(c, 1)); 

想你想達到可與std::set做(如果你不關心對象的順序 - 字符 - 存儲裏面)

#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 << ' '; 
} 

http://cpp.sh/3zrgr

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)); 
} 
相關問題