在c ++中更新地图值

时间:2011-12-31 19:31:48

标签: c++ map

这里的新问题: 如何将Maptest [2]中存储的值与变量一起更新? 我以为你可以用指针做到这一点,但这不起作用:

map<int, int*> MapTest; //create a map

    int x = 7; 

   //this part gives an error: 
   //"Indirection requires pointer operand ("int" invalid)"
    MapTest[2] = *x; 


    cout << MapTest[2]<<endl; //should print out 7...

    x = 10;

    cout <<MapTest[2]<<endl; //should print out 10...

我做错了什么?

3 个答案:

答案 0 :(得分:4)

您需要地址 x。您当前的代码正在尝试取消引用整数。

MapTest[2] = &x;

然后,您需要取消引用MapTest[2]返回的内容。

cout << *MapTest[2]<<endl;

答案 1 :(得分:0)

请改为尝试:

MapTest[2] = &x; 

您希望x的地址存储在int*中。不是x的取消引用,它将是内存位置0x7,它不会有效。

答案 2 :(得分:0)

这里至少有两个问题:

int x = 7;
*x; // dereferences a pointer and x is not a pointer.
m[2] = x; // tries to assign an int value to a pointer-to-int value
// right
m[2] = &x; // & returns the address of a value

现在你遇到了一个新问题。 x具有自动生命周期,它将是 在周围范围的末端被摧毁。你需要分配它 来自免费商店(a.k.a. heap)。

int* x = new int(7);
m[2] = x; // works assigns pointer-to-int value to a pointer-to-int value

现在您必须记住delete之前map中的每个元素 它超出了范围,否则你会泄漏内存。

将值存储在map中,或者如果您确实需要,则更为明智 存储指针以存储合适的智能指针(shared_ptrunique_ptr)。

打印:

m[2]; // returns pointer value
*m[2]; // dereferences said pointer value and gives you the value that is being pointed to