簡體   English   中英

構造一個對(字符串,*節點)以插入到unordered_map中

[英]constructing a pair(string, *node) to insert into an unordered_map

typedef unordered_map<string, relationNode*> relationMap;
using relation_entry = relationMap::value_type;

void insertNode(string category, relationNode* node) {
   relation_entry insertPair =
     make_pair<string, relationNode*>(category, node);
}

導致錯誤“無法轉換'類別'(類型'std :: string(又名std :: basic_string(char))')”為類型'std :: basic_string(char)&&“和錯誤“無法轉換'node '(鍵入“ relationNode *”)以鍵入“ relationNode * &&”。

我打算將它們配對,然后將其插入unordered_map中。

我正在使用“ g ++ -g -O0 -Wall -Wextra -std = gnu ++ 11”來編譯代碼。 任何幫助將不勝感激。

寫吧:

   relation_entry insertPair =
     make_pair(category, node);

這將起作用並且更加簡潔(實際上,這就是您使用std::make_pair而不是首先直接調用構造函數的原因)。

您應該知道這是C ++ 11向后兼容性問題 考慮這段C ++ 98代碼(我將unordered_map替換為map並與typedef一起using ):

#include <map>
#include <string>
using namespace std; // just for testing

struct relationNode {};

typedef map<string, relationNode*> relationMap;
typedef relationMap::value_type relation_entry;

void insertNode(string category, relationNode* node) {
   relation_entry insertPair =
     make_pair<string, relationNode*>(category, node);
}

int main() {
}

轉到http://cpp.sh/並嘗試對其進行編譯。 您會看到它在C ++ 98模式下可以正常編譯,但在C ++ 11和C ++ 14模式下則不能編譯。

有關此問題的詳細說明,請參見帶有指定模板參數的C ++ 11 make_pair無法編譯

底線:不要指定冗余類型參數,您會沒事的。

暫無
暫無

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

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