如何从指针访问C++ map的元素?

34

这是一个简单的问题,但对于搜索引擎来说很难表述:如果我创建了一个指向map对象的指针,如何访问和设置它的元素?以下代码不起作用。

map<string, int> *myFruit;
myFruit["apple"] = 1;
myFruit["pear"] = 2;
3个回答

84

你可以这样做:

(*myFruit)["apple"] = 1;
或者
myFruit->operator[]("apple") = 1;
或者
map<string, int> &tFruit = *myFruit;
tFruit["apple"] = 1;

或者(C++11)

myFruit->at("apple") = 1;

不要忘记首先使用new为地图对象分配内存。 - hookenz
我的回答假设myFruit是一个已经存在的指向map<string, int>的指针,它可能已经在堆上分配了空间,也可能没有。 - Greg Hewgill
4
如果你需要额外的语义信息,C++11 提供了一个经过检查的 at() 函数。你可以使用 ptr->at("apple") - PlasmaHH

6

myFruit是一个指向map的指针。如果你去掉星号,那么你将得到一个map,并且你后面的语法也会生效。

另外,你可以使用解引用运算符(*)来访问指针所指向的map,但是你必须先创建你的map:

map<string, int>* myFruit = new map<string, int>() ;

2
这有点偏离重点。他已经知道他无法访问元素,但他有一个指针,并且它已经被分配了。 - GManNickG
我重新阅读了问题,没有看到提到地图已经分配的内容,或者是我错过了吗? - swongu

3
map<string, int> *myFruit;
(*myFruit)["apple"] = 1;
(*myFruit)["pear"] = 2;

如果您需要将其保留为指针,则会起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接