如何访问指向地图的元素?

时间:2015-08-12 13:57:39

标签: c++ dictionary

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

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

当我编译它时,我收到错误:

error: no match for ‘operator*’ (operand type is ‘std::map >’)
     *baa[1] = "somethingnew";

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

2 个答案:

答案 0 :(得分:8)

由于运营商优先级规则,Google Play Services被解析为*baa[1]而不是*(baa[1])。您可以放入括号使其工作。但是,您最好使用引用:

(*baa)[1]

然后你只需要调用函数而不需要获取地图的地址:

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

答案 1 :(得分:2)

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

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

的优先级相同

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