2014-07-01 84 views
-4

我希望能夠通過文本字符串調用特定的矩陣。我試圖設置一個地圖來做到這一點,但我並沒有說得很對。這個C++地圖有什麼問題?

我注意到,如果我指的是矩陣,我試圖通過它的地圖名稱進行操作,它似乎工作(即,signalIndex["T2"].signal[i][0]=10),但是如果我嘗試引用地圖標籤指向的矩陣,它不工作。有什麼建議?

#include <iostream> 
#include <map> 
using namespace std; 

struct signalGrid{ 
    double signal[20][200]; 
    signalGrid(); 
}; 


void mapTest(std::map<string,signalGrid> &temp_map); 
map<string,signalGrid> signalIndex; 
signalGrid testGrid1,testGrid2; 


int main(){ 
    int i; 

    signalGrid tempGrid; 
    mapTest(signalIndex); 

    tempGrid=signalIndex["T1"]; 
    for(i=0;i<5;i++){ 
     tempGrid.signal[i][0]=5;} 

    for(i=0;i<5;i++){ 
     cout<<"TEST="<<tempGrid.signal[i][0]<<"\n";} 
    for(i=0;i<5;i++){ 
     cout<<"TEST="<<testGrid1.signal[i][0]<<"\n";} 
    for(i=0;i<5;i++){ 
     cout<<"TEST2="<<signalIndex["T1"].signal[i][0]<<"\n";} 

    for(i=0;i<5;i++){ 
     signalIndex["T2"].signal[i][0]=10;} 
    for(i=0;i<5;i++){ 
     cout<<"TEST3="<<testGrid2.signal[i][0]<<"\n";} 
    for(i=0;i<5;i++){ 
     cout<<"TEST4="<<signalIndex["T2"].signal[i][0]<<"\n";} 
    return 0; 
} 


void mapTest(std::map<string,signalGrid> &temp_map){ 

    temp_map["T1"]=testGrid1; 
    temp_map["T2"]=testGrid2; 
    return; 
} 

signalGrid::signalGrid(){ 
    int i,j; 
    for(i=0;i<20;i++){ 
     for(j=0;j<200;j++){ 
      signal[i][j]=0;}} 
} 
+2

你能舉個例子就不會更新相應的矩陣,在代碼中,你希望工作,但沒有。目前還不清楚爲什麼你已經包含了所有這些測試用例。只有其中一些工作?你能告訴我們哪些工作或哪些有問題嗎? –

+0

我希望能夠通過引用「signalIndex [」T1「]。signal [x] [y]」來操作「testGrid1」,所以沒有一個測試用例真的有效。當我說「signalIndex [」T2「]。signal [i] [0] = 10時,我不知道代碼在做什麼;」它好像將信息存儲在某處,但不在testGrid2中,因爲我希望它。 – user1042343

回答

1

你需要與參考操作映射項

signalGrid &tempGrid = signalIndex["T1"]; 

否則你只是改變兩個獨立的副本,並在一個變化將不會影響其他。

1

您正在下面的語句中創建一個新副本。

tempGrid=signalIndex["T1"]; 

modifiying tempGrid在地圖