c++之map賦值
阿新 • • 發佈:2018-12-24
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)insert
will 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_type
std::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::string
type 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
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