这个C ++地图在做什么?

时间:2014-07-01 16:26:15

标签: c++ map hashmap

我有一个全局变量" testGrid"我试图创建一个地图,以便我可以用字符串引用它。地图似乎有效,因为我可以为网格分配值,但它没有将它们分配给" testGrid"我打算这样做。

地图是否创建了一个与全局变量分开的新网格?如何让地图正确引用网格?在此代码中,两个测试的输出应该相同。

#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 testGrid;


int main(){
    int i;
    mapTest(signalIndex);

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


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

    temp_map["T1"]=testGrid; 
    return; 
}

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

1 个答案:

答案 0 :(得分:4)

是的,您正在将testGrid复制到与密钥"T1"对应的值中。使用该值执行任何操作只会修改副本。

您可以拥有map<string, reference_wrapper<signalGrid>>,但我不确定您为什么要首先使用全局testGrid变量。为什么不摆脱testGrid而只是处理signalIndex["T1"]