假设我有一个类型的地图
std::map<int, Node> G;
Run Code Online (Sandbox Code Playgroud)
节点如下
struct Node{
Node(){};
int data;
};
Run Code Online (Sandbox Code Playgroud)
我想使用operator []返回对节点的引用(如果它在地图中),或者创建一个新节点并返回引用(如果不是).这是我对文档说的内容的理解:
如果k匹配容器中元素的键,则该函数返回对其映射值的引用.
如果k与容器中任何元素的键不匹配,则该函数将使用该键插入一个新元素,并返回对其映射值的引用.请注意,即使没有为元素指定映射值(使用其默认构造函数构造元素),这也会将容器大小增加1.
但是,以下代码引发错误(g ++ 5,std = gnu ++ 11):
错误:无法在赋值u_ptr = G [3]中将'std :: map :: mapped_type {aka Node}'转换为'Node*';
Node* u_ptr;
u_ptr = G[3];
Run Code Online (Sandbox Code Playgroud)
在我看过的所有例子中,都G[k]出现在lhs上.G[k]rhs上是不允许的?如果没有,为什么?
std::map<Key, T>::operator[]返回一个T&引用.
在这种情况下,T是Node,所以G[3]返回一个Node&引用,然后您尝试将其分配给Node*指针.这就是您遇到编译器错误的原因.
所以,您可以:
改为u_ptr参考:
Node& u_ptr = G[3];
Run Code Online (Sandbox Code Playgroud)使用&地址运算符将引用转换为指针:
Node* u_ptr;
u_ptr = &G[3];
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |