这个 C++ 映射有什么问题?[关闭]

What is wrong with this C++ map? [closed]

提问人:user1042343 提问时间:7/1/2014 最后编辑:Bill Lynchuser1042343 更新时间:7/1/2014 访问量:118

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答这个问题。

9年前关闭。

我希望能够通过文本字符串调用特定矩阵。我正在尝试设置一张地图来做到这一点,但我的地图不太正确。

我注意到,如果我引用我试图通过其映射名称操作的矩阵,它似乎有效(即,但是,如果我尝试引用映射标签指向的矩阵,它不起作用。有什么建议吗?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;}}
}
C++ 字典

评论

2赞 Bill Lynch 7/1/2014
你能举一个例子吗,在代码中,你期望工作但不能。目前还不清楚为什么你要包含所有这些测试用例。只有其中一些有效吗?您能告诉我们哪些工作或哪些有问题吗?
0赞 user1042343 7/1/2014
我希望能够通过将“testGrid1”引用为“signalIndex[”T1“].signal[x][y]”来操作“testGrid1”,因此没有一个测试用例真正起作用。当我说“signalIndex[”T2“].signal[i][0]=10;”似乎它将信息存储在某个地方,但不是像我想要的那样存储在 testGrid2 中。

答:

1赞 Erbureth 7/1/2014 #1

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

signalGrid &tempGrid = signalIndex["T1"];

否则,您只是更改了两个单独的副本,其中一个副本中的更改不会影响另一个副本。

1赞 Sravan Goud 7/1/2014 #2

您将在以下语句中创建一个新副本。

tempGrid=signalIndex["T1"];

修改 tempGrid 不会更新映射中的相应矩阵