簡體   English   中英

為什么在std :: map上使用Operator []無效?

[英]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&引用。

在這種情況下, TNode ,因此G[3]返回一個Node&引用,然后嘗試將其分配給Node*指針。 這就是為什么您遇到編譯器錯誤的原因。

因此,您可以:

  1. u_ptr更改為參考:

     Node& u_ptr = G[3]; 
  2. 使用&地址運算符將引用轉換為指針:

     Node* u_ptr; u_ptr = &G[3]; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM