- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
假设我有一个 map<int, int>
:
std::map<int, int> map;
map.emplace(1, 2);
map.insert({3, 4});
这两个调用会有什么区别吗?
在第一次调用中,这两个整数将按值复制到emplace
。功能,然后再次到 std::pair<int, int>
构造函数。在第二次调用中,这两个整数将按值复制到 std::pair<int, int>
。构造函数,然后按值复制到内部 std::pair<int, int>
再次作为第一对的成员。
我了解 emplace 对 std::string
等类型的好处它们将在第二次调用中按值复制并在第一次调用中一直移动,但是使用 emplace
有什么好处吗?在所描述的情况下?
最佳答案
Emplace 比较慢,如果 emplace 有可能会失败( key 已经存在)。
这是因为 emplace
需要分配一个节点并构造 pair<Key const, Value>
进入其中,然后从该节点中提取 key 并检查该 key 是否已经存在,如果该 key 已经存在则释放该节点。另一方面insert
可以从要插入的传递值中提取键,因此如果插入失败则不需要分配节点。请参阅:performance of emplace is worse than check followed by emplace .
为了解决这个问题,C++17 添加了一个成员函数 try_emplace(const key_type& k, Args&&... args)
(etc.)
如果成功的话,这两种情况之间并没有真正的区别;操作顺序不同,但这不会以任何可预测的方式影响性能。 emplace
的代码大小仍会略大变体,因为它必须准备好在失败情况下执行更多工作。
关于c++ - 基本类型的 emplace 值得吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595403/
我正在生成代码,其中我恰好将 n 个单词从一个内存位置复制到另一个非重叠内存位置。 n 是静态已知的。 目前,我发出大量加载指令,然后是大量存储指令,但我怀疑从 n 的某个值开始,调用 memcpy会
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
用例如下: 我有一张 map ,其中将插入一些键/值。 该程序将查询该 map ,但是在第一个查询之后,我可以保证该 map 将完全不会被修改。 因为查询的结果完全是输入的函数,所以在查询方法上放置属
Helo 伙计们,我尝试使用 Refs 并在他的内部提供 this.setState 但它给出: Maximum update depth exceeded. This can happen when
在检查事件时,使用带有 switch 或 if 的代码块是很常见的事情。如果变得简单,它可以是干净的代码,但似乎仍然有比需要更多的行,并且可以使用 lambda 进行简化。 用 if 阻止: if(a
Amazon 最近宣布在其 RDS 产品线中支持 Oracle: http://aws.amazon.com/rds/oracle/ 我想知道是否有人使用过它,或者是否有令人信服的理由将我的数据从 M
我是一名优秀的程序员,十分优秀!