这个C ++地图有什么问题?

时间:2014-07-01 14:54:49

标签: c++ map

我希望能够通过文本字符串调用特定的矩阵。我正在尝试设置一张地图来做这件事,但我没有这么做。

我注意到如果我参考矩阵我试图通过它的地图名称进行操作,它似乎有效(即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 :(得分:1)

您需要使用对地图项的引用进行操作

signalGrid &tempGrid = signalIndex["T1"];

否则你只是改变了两个单独的副本,一个变化不会影响另一个副本。

答案 1 :(得分:1)

您正在以下声明中创建新副本。

tempGrid=signalIndex["T1"];

修改temp Grid不会更新地图中相应的矩阵