c++ - 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); }
causes error of "cannot convert 'category' (type 'std::string(aka std::basic_string(char))') type 'std::basic_string(char)&&" , error of "cannot convert 'node' (type 'relationnode*') type 'relationnode*&&".
i planning make pair insert unordered_map.
i using "g++ -g -o0 -wall -wextra -std=gnu++11" compile code. appreciated.
just write:
relation_entry insertpair = make_pair(category, node);
this work and more concise (in fact, that's reason use std::make_pair
instead of calling constructor directly in first place).
you should know backward-compatibility issue c++11. consider piece of c++98 code (i replaced unordered_map
map
, using
typedef
):
#include <map> #include <string> using namespace std; // 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() { }
go http://cpp.sh/ , try compile it. see compiles fine in c++98 mode not in c++11 , c++14 modes.
for detailed explanation of issue, see c++11 make_pair specified template parameters doesn't compile
bottom line: don't specify redundant type arguments , you'll fine.
Comments
Post a Comment