c++之map赋值
对map赋值有下面4种方法:
// 1) Assignment using array index notation
Foo["Bar"] = 12345;
// 2) Assignment using member function insert() and STL pair
Foo.insert(std::pair<string,int>("Bar", 12345));
// 3) Assignment using member function insert() and "value_type()"
Foo.insert(map<string,int>::value_type("Bar", 12345));
// 4) Assignment using member function insert() and "make_pair()"
Foo.insert(std::make_pair("Bar", 12345));
stack overflow上大神是这样分析的:
First, there are semantic differences between [] and insert:
[]will replace the old value (if any)insertwill ignore the new value (if an old value is already present)
therefore comparing the two is useless in general.
Regarding the inserts versions:
std::map<std::string, int>::value_typeisstd::pair<std::string const, int>so no (important) difference between 3 and 4std::make_pair("Bar", 12345)is cheaper thanstd::pair<std::string, int>("Bar", 12345)because thestd::stringtype is a full fledged class with operations to do on copy and"Bar"is just a string literal (thus just a pointer copy); however since at the end you do need to create thestd::string... it will depend on the quality of your compiler
In general, I would recommend:
[]for updatinginsert(std::make_pair())for ignoring duplicates
std::make_pair is not only shorter, it also respects the DRY guideline: Don't Repeat Yourself.
For completeness though, the fastest (and easiest) would be emplace (C++11 enabled):
map.emplace("Bar", 12345);
Its behavior is that of insert, but it constructs the new element in-place.
- 参考:
https://stackoverflow.com/questions/14218042/most-efficient-way-to-assign-values-to-maps