2017-10-05 46 views
2

我有一個函數,它檢查字符串中重複的字符和次數。如何使用迭代器更新映射的第二個值

它被存儲爲(例如)字符串是 「你好」 並[h] => 1 [E] => 1 [1] => 2 [O] = 1

每當字母出現多於一旦我需要更新它。

我嘗試使用

it->second = it->second+1; 

但它並不適用 我怎麼能這樣做?

的完整代碼

int fn(string a) { 
    map<char,int> mymap; 
    for(int i=0;i<a.size();i++) 
    { 
     std::map<char, int>::iterator it = mymap.find(i); 
     if(it!=mymap.end()) 
     { 
      //say i need to update occurrence from 1 to 2 or 2 to 3... 
      it->second = it->second+1;//(how can i do that) 
     } 
     else 
     mymap.insert(pair<char,int>(a[i],1)); 
    } 
    std::map<char,int>::iterator i; 
    for(i=mymap.begin();i!=mymap.end();i++) 
    { 
     cout<<i->first<<i->second; 
    } 
} 
+1

我無法重現您的錯誤。當我嘗試編譯您提供的示例時,它工作正常。 –

+2

@juanchopanza提供了優雅的解決方案。順便說一句:你的解決方案的問題只是一個錯字:'mymap.find(i)' - >'mymap.find(a [i])' –

+0

[無法重現](https://ideone.com/TeHBNT ) –

回答

11

你並不需要所有的代碼。你只能說

for (auto c : a) mymap[c]++; 

這工作,因爲當一個人沒有爲一個給定鍵存在地圖的operator[]插入零初始化的元素。

+0

我剛剛爲您添加範圍時發表評論。 +1。 – NathanOliver

+0

但我需要找到一個特定的字符mymap.find(i)。如果發生這種情況,我需要增加 – Muthu

+2

@Muthu如果找不到元素'a [i]',它會被初始化爲0,所以循環體將它加1。這正是你在'else'中所做的身體。 –