如何访问指针映射的元素

How can I access the elements of a pointer-to-map?

本文关键字:指针 映射 元素 访问 何访问      更新时间:2023-10-16

我已经通过指针向函数传递了一个映射,但是现在我无法更改映射的内容,因为代码无法编译。我甚至不确定是否允许我将地图作为指针传递。例如:

#include <iostream>
#include <stdlib.h>
#include <map>
#include <string>
using namespace std;
void faa(map<int,string> *baa){
   *baa[1] = "somethingnew";
}
int main(){
    map<int,string> bar;
    bar[1] = "one";
    bar[2] = "two";
    bar[3] = "three";
    int ii;
    for(ii=1;ii<4;ii++){
        cout<<"bar["<<ii<<"]="<<bar[ii]<<endl;
    }
    faa(&bar);
    cout<<"after"<<endl;
    for(ii=1;ii<4;ii++){
        cout<<"bar["<<ii<<"]="<<bar[ii]<<endl;
    }
}

当我编译这个时,我得到了错误:

<>之前错误:没有匹配' operator* '(操作数类型为' std::map> ')*baa[1] = "somethingnew";之前

像faa这样的函数可能吗?语法是什么?

由于运算符优先规则,*baa[1]被解析为*(baa[1])而不是(*baa)[1]。你只要在括号里加上括号就行了。但是,您最好使用引用:

void faa(map<int,string> &baa){
   baa[1] = "somethingnew";
}

那么你只需要调用函数而不需要map的地址:

faa(bar);

您可以使用(*baa)[1]

默认优先级与*(baa[1])

相同

解释错误信息:如果baa是指针,可以使用[]操作符访问指针指向的第n个元素,因此baa[1]的类型是std::map,并且它没有*操作符。