Nic*_*yer 20
object * myObject = // get an object somehow
myMap.insert(std::make_pair(std::make_pair(1,2), myObject));
Run Code Online (Sandbox Code Playgroud)
要么
typedef map<pair<int, int>, object *> MapType;
object * myObject = // get an object somehow
myMap.insert(MapType::value_type(std::make_pair(1,2), myObject));
Run Code Online (Sandbox Code Playgroud)
Geo*_*mer 11
假设您使用的是C++ 11或更高版本,最好的方法可能是:
object * myObject = // get an object somehow
myMap.emplace({1,2}, myObject);
Run Code Online (Sandbox Code Playgroud)
对于map,emplace可以认为是一个版本insert,它将键和值作为单独的参数(它实际上pair可以采用相应类型的构造函数可以采用的任何参数组合).除了在语法上更清晰之外,它还可能比效率更高make_pair,因为它make_pair通常会产生类型value_type与容器不完全匹配的输出,因此会产生不必要的类型转换.
我曾经推荐过这个,它也适用于C++ 11或更高版本:
object * myObject = // get an object somehow
myMap.insert({{1,2}, myObject});
Run Code Online (Sandbox Code Playgroud)
这避免了稍微令人惊讶的使用emplace,但如果键或值类型仅移动(例如unique_ptr),它以前不起作用.这已在标准中得到修复,但您的标准库实现可能尚未获得修复.从理论上讲,这也可能稍微低一些,但是在某种程度上,任何中途不错的编译器都可以轻松地优化掉.
| 归档时间: |
|
| 查看次数: |
47114 次 |
| 最近记录: |