提问人:user1042343 提问时间:7/1/2014 最后编辑:Bill Lynchuser1042343 更新时间:7/1/2014 访问量:118
这个 C++ 映射有什么问题?[关闭]
What is wrong with this C++ map? [closed]
问:
我希望能够通过文本字符串调用特定矩阵。我正在尝试设置一张地图来做到这一点,但我的地图不太正确。
我注意到,如果我引用我试图通过其映射名称操作的矩阵,它似乎有效(即,但是,如果我尝试引用映射标签指向的矩阵,它不起作用。有什么建议吗?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;}}
}
答:
1赞
Erbureth
7/1/2014
#1
您需要使用对地图项的引用进行操作
signalGrid &tempGrid = signalIndex["T1"];
否则,您只是更改了两个单独的副本,其中一个副本中的更改不会影响另一个副本。
1赞
Sravan Goud
7/1/2014
#2
您将在以下语句中创建一个新副本。
tempGrid=signalIndex["T1"];
修改 tempGrid 不会更新映射中的相应矩阵
评论