Qaz*_*Qaz 4 c++ hashmap multimap c++11 emplace
我正在使用C++ 11和gcc-4.7.0.我正在寻找一个STL解决方案.
我想要一个未分类的多图,其中包含myClass的对象,短字符串作为键.Emplace看起来像是在构造它们时将对象放入地图的好方法,但是我不确定它是否可以做到这一点,或者它是否只构造键/对象.这应该是有效的:
table.emplace(myKey, myClass(arg1, arg2, arg3));
Run Code Online (Sandbox Code Playgroud)
但是,执行以下操作会更有效吗?它甚至是有效的代码吗?
table.emplace(myKey, arg1, arg2, arg3);
Run Code Online (Sandbox Code Playgroud)
根据这个,gcc-4.7不完全支持emplace().
gcc-4.8会完全支持emplace(),但需要一点点不同的语法:
table.emplace(std::piecewise_construct, std::forward_as_tuple(myKey), std::forward_as_tuple(arg1, arg2, arg3));
Run Code Online (Sandbox Code Playgroud)
代替
table.emplace(myKey, arg1, arg2, arg3); // Does not work.
Run Code Online (Sandbox Code Playgroud)
为了forward使rvalue生效,可以使用std::move()包围参数.
因此,它将直接在容器中构建键和值.
std::piecewise_construct是构造函数的特殊用法的参数std::pair.它将要求构造函数将参数单独转发给底层构造函数.
这实际上是emplace()关联容器的问题.最初的意图是使用key的第一个参数,以及值的以下参数,就像问题中描述的那样.请参见本关于这个问题的进一步的细节.
感谢Zeta指出forward问题.
| 归档时间: |
|
| 查看次数: |
2119 次 |
| 最近记录: |