【问题标题】:What is this C++ map doing?这个 C++ 映射在做什么?
【发布时间】:2014-07-01 16:26:15
【问题描述】:

我有一个全局变量“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;}}
}

【问题讨论】:

  • @pmr 不完全是,不幸的是。 :( 他们仍然有同样的误解,但这是一个不同的问题。

标签: c++ map hashmap


【解决方案1】:

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

你可以有一个map&lt;string, reference_wrapper&lt;signalGrid&gt;&gt;,但我不完全确定你为什么首先需要全局testGrid 变量。为什么不摆脱testGrid而只处理signalIndex["T1"]

【讨论】:

  • 好的,这可能就是我要做的。我认为地图是在创建一个指向变量 testGrid 的指针,而不是创建我以后可以引用的自己的网格。
  • @user1042343 C++ 中的几乎所有内容都是“按价值”,除非您另有要求。唯一的例外是表示引用语义的类型,例如reference_wrapper 或智能指针。
猜你喜欢
  • 2011-04-16
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 2020-09-29
相关资源
最近更新 更多