![](/img/trans.png)
[英]C++ unordered_map<string, ...> lookup without constructing string
[英]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.