[英]Why is my use of Operator[] on std::map invalid?
假設我有一個類型為的地圖
std::map<int, Node> G;
節點如下
struct Node{
Node(){};
int data;
};
我想使用operator []返回對Node的引用(如果它在地圖中),或者創建一個新的Node並返回一個引用(如果不是)。 這就是我對文檔內容的理解:
如果k與容器中元素的鍵匹配,則該函數返回對其映射值的引用。
如果k與容器中任何元素的鍵都不匹配,則該函數將使用該鍵插入一個新元素,並返回對其映射值的引用。 請注意,即使沒有將映射值分配給元素(元素是使用其默認構造函數構造的),這也始終使容器大小增加一。
但是,以下代碼引發錯誤(g ++ 5,std = gnu ++ 11):
錯誤:無法在分配u_ptr = G [3]中將“ std :: map :: mapped_type {aka Node}”轉換為“ Node *”;
Node* u_ptr;
u_ptr = G[3];
在我所看到的所有示例中, G[k]
出現在lhs上。 在rhs上不允許G[k]
嗎? 如果沒有,為什么?
std::map<Key, T>::operator[]
返回T&
引用。
在這種情況下, T
是Node
,因此G[3]
返回一個Node&
引用,然后嘗試將其分配給Node*
指針。 這就是為什么您遇到編譯器錯誤的原因。
因此,您可以:
將u_ptr
更改為參考:
Node& u_ptr = G[3];
使用&
地址運算符將引用轉換為指針:
Node* u_ptr; u_ptr = &G[3];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.