如何将对插入地图

Myx*_*Myx 12 c++ insert map

我有以下地图结构:map < pair < int,int >, object* >我希望插入其中.

我怎么做,因为我试图插入一对和一个对象,我必须从中做出一对

我应该使用make_pair()我拥有的对和对象创建一对新对吗?如果是的话,你能告诉我怎么做吗?

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)

  • 如果您在代码中大量使用它,您可能希望将映射包装在具有insert(pair,object)函数的类中以便于阅读. (3认同)

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),它以前不起作用.这已在标准中得到修复,但您的标准库实现可能尚未获得修复.从理论上讲,这也可能稍微低一些,但是在某种程度上,任何中途不错的编译器都可以轻松地优化掉.