2014-10-01 40 views
0

我保存串的2D矢量作爲爲什麼地圖在C++中創建NULL?

vector<vector<string>> database 

它具有以下數據

database[0] -> A C D (database[0][0] -> A , database[0][1] -> C and so on) 
database[1] -> B C E F 
database[2] -> A B C E F 
database[3] -> B E 
database[4] -> A C F 

我計數每個string的發生(在該示例中每個字符A,B等)和它在一個mapmap_c作爲

map<string,int> map_c ; 

    for(i=0 ; i<database.size() ; i++) 
    { 
     for(j=0 ; j<database.at(i).size() ; j++) 
     { 
      if(map_c.find(database.at(i).at(j)) != map_c.end()) 
      { 
       map_c[database[i][j]]++;     
      } 
      else 
      { 
       map_c[database[i][j]] = 1; 
      } 
     } 

    } 

和印刷用t每個串的計他的代碼

for(map<string,int>::iterator it = map_c.begin() ; it != map_c.end() ; it++) 
{ 
    cout << it->first << " -> " << it->second << endl; 
} 

輸出 - >

-> 1 
A -> 3 
B -> 3 
C -> 4 
D -> 1 
E -> 3 
F -> 3 

爲什麼NULL鍵已與數1產生的?

+1

'std :: map'的'[]'將默認構造不在映射中的對象,並且初始化指針和數值爲零,因此您不需要額外的情況來設置'1'值。但猜測你有一個額外的條目,你不期望。 – crashmstr 2014-10-01 12:01:23

+0

也許你的''數據庫'中有空白? – gsamaras 2014-10-01 12:02:29

+0

你確定它是NULL,不只是''(空格)?你確定你的媒介沒有這個空間嗎? – 2014-10-01 12:02:50

回答

3

++map_c[database[i][j]];替換您的if...else。地圖中int的默認值爲0

輸出中的意外條目是因爲您的database實際上已包含該條目。如果您不確定此條目爲什麼位於數據庫中,請查看設置數據庫的代碼(和/或發佈該代碼)。

4

您發佈的代碼不應該生成空的(或空格)字符串。可能有這樣一個字符串與您的初始數據。

無論哪種方式,你的代碼來填充圖上可以做得更短得多:

map<string,int> map_c ; 
for(const auto& line: database) 
    for(const auto& s: line) 
     ++map_c[s]; 
0

對不起,finaly我擺脫這個問題。問題出在輸入文件中。在文件末尾,最後一行有一個空格字符,我在想它的文件已經被覆蓋了。這個空間正在造成問題。我很抱歉給您帶來的不便,並非常感謝您的回覆和時間。

相關問題