这个 C++ 映射在做什么?

What is this C++ map doing?

提问人:user1042343 提问时间:7/2/2014 更新时间:7/2/2014 访问量:76

问:

我有一个全局变量“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;}}
}
C++ 字典 哈希图

评论

0赞 Joseph Mansfield 7/2/2014
@pmr 不幸的是,不完全是。:(他们仍然有同样的误解,但这是一个不同的问题。

答:

4赞 Joseph Mansfield 7/2/2014 #1

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

你可以有一个 ,但我不太确定你为什么首先需要全局变量。为什么不摆脱并处理呢?map<string, reference_wrapper<signalGrid>>testGridtestGridsignalIndex["T1"]

评论

0赞 user1042343 7/2/2014
好吧,这可能就是我要做的。我以为地图正在创建指向变量 testGrid 的指针,而不是创建我以后可以引用的自己的网格。
1赞 Joseph Mansfield 7/2/2014
@user1042343 除非你另有要求,否则C++中几乎所有东西都是“按价值计算的”。唯一的例外是表示引用语义的类型,例如智能指针。reference_wrapper