2015-06-14 52 views
-2

我想知道如何在循環內的地圖中插入值。 我在以下代碼中使用了insert(),但這沒有奏效。如何在循環內的STL映射中插入值

#include<stdio.h> 
#include<map> 
#include<utility> 
using namespace std; 
int main() 
{ 
    int t; 
    scanf("%d", &t); 
    while (t--) 
    { 
     int n, i; 
     map<char*, int> vote; 
     char name[20], v; 
     scanf("%d", &n); 
     for (i = 0; i<n; ++i) 
     { 
      scanf("%s %c", name, &v); 
      vote.insert(make_pair(name, 0)); 

      vote[name] = 0; 
      if (v == '+') 
       vote[name]++; 
      else 
       vote[name]--; 
      printf("%d\n", vote[name]); 
      printf("Size=%lu\n", vote.size()); 
     } 
     int score = 0; 
     for (map<char*, int>::iterator it = vote.begin(); it != vote.end(); ++it) 
     { 
      printf("%s%d\n", it->first, it->second); 
      score += it->second; 
     } 
     printf("%d\n", score); 

    } 
} 

每次我輸入一個新的密鑰(字符串)它只是更新前一個。 地圖的大小始終爲1.

如何正確添加新元素到地圖?

+1

把你的代碼放在你的帖子中而不是鏈接它 –

+0

@GlennTeitelbaum沒有OP應該發佈一個[MCVE](http://stackoverflow.com/help/mcve),這實際上有點多,而不僅僅是發佈它們碼。 –

+1

一次發生一個問題,鏈接的代碼不是特別長 –

回答

2

該地圖由指針(char*)鍵控。代碼中的密鑰總是相同的 - name指針(儘管您更改指針指向的內容,但它不會改變指針本身不相同的事實)。

您可以使用std::string作爲密鑰而不是char*

更改地圖的定義(替換std::string中的char*)將解決該問題。

編輯:正如@McNabb所說,也改變it->firstit->first.c_str()

+0

http://meta.stackoverflow.com/a/296798/1413395 –

+1

不要_guess_,一定要回答。 –

+0

@MaMazav謝謝!問題解決了 –