问题标签 [emplace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++11 - 如何在地图中插入/放置以避免创建临时对象?
我正在阅读 C++11 书籍之一的建议,以便在向容器中添加项目时更倾向于emplace
避免insert
创建临时对象(调用被插入对象的构造函数/析构函数)。但我有点困惑,因为有几种可能性可以将对象添加到地图,例如
还有一些底层机制在阅读这样的代码时不会立即可见 - 完美转发,隐式转换......
将项目添加到地图容器的最佳方式是什么?
c++ - priority_queue::emplace 调用 push_heap?
根据CPP Reference,std::priority_queue::emplace
“有效调用”
这里的“有效”是什么意思?这是否意味着emplace
与那些调用具有相同的功能,或者emplace
是使用这些调用实现的(我的理解是实现留给编译器)。如果emplace
真的是这样实现的,那不是效率低下吗?如果我将一个元素添加到现有堆中,则不需要堆化整个堆。
c++ - emplace_back 在向量中调用赋值运算符,但不在列表中
根据 http://www.cplusplus.com/reference/vector/vector/emplace_back/ 我知道 emplace_back 会在不调用赋值运算符的情况下就地创建对象。但是在 std::vector 的情况下,它们调用赋值运算符,而在 std::list 的情况下它们不调用赋值运算符。
我的对象不可复制。除了使用指针之外,还有其他方法可以解决这个问题。
向量中的擦除似乎也调用了赋值运算符,列表中的擦除不调用赋值运算符。这对我来说似乎不对..
std 不支持不可复制的对象吗?
c++ - 带有可变参数模板的自定义容器 emplace
我正在实现一个简单的圆形向量类。我想实现一个 emplace 成员函数,但我收到一个我不明白的错误。对于我做错的事情,这可能是一个简单的修复,但由于我对可变参数模板没有太多经验,所以我无法弄清楚是什么......
我得到的错误是:
产生此错误的源代码是(也位于此处http://coliru.stacked-crooked.com/a/37d50d6f23363357):
c++ - 如何在值为 std::set 的 std::map 中使用 emplace() (从某物映射到一个集合)?
问题
我有一个std::map<int, std::set<int>>
名为misi
. 我想知道为什么misi.emplace(2345, {6, 9});
并且misi.emplace({2345, {6, 9}});
不按预期工作,如下所示。
编码
上面是std::set
,您可以看到初始化列表构造函数并且emplace()
工作正常。
以上是std::map
to int
,int
您可以看到这些方法也可以完美运行,除了在最后一个示例中,std::pair
可能有些多余。我想知道是否std::pair
是就地建造的。(好吧,我想不是)
对于 astd::map
到 a std::set
,初始化列表构造函数如上所示完美运行。但是emplace()
没有!(如下所示)
在这里,以下语法是可以的,但并不完全符合我的要求:
所以,似乎没有办法std::pair
就地创建,而且似乎std::set
是就地创建的(对吧?)。有没有人有任何想法?
我正在使用的编译器是:
dictionary - 地图::emplace,其中 V 构造函数需要两个参数
我可以为 map::emplace 找到的所有示例都使用相当简单的类型,这些类型的构造函数采用单个参数,例如
假设值类型构造函数需要两个参数。哎呀,让我们真的让它变得简单;假设值类型是std::pair<std::string, double>
. 如何使用std::map<string, pair<string, double> >::emplace()
在地图中就地构造值类型?
我知道这不起作用:
至少,它在 g++ 4.8.2 上大声而冗长地失败了。这甚至可以用 C++11 实现吗?
c++ - 如何有效地 emplace_back(pair)?
我有
并且想要emplace_back
一个带有pair::first
holding{i,j,k}
和pair::second
holding的元素q
。我能得到这个编译的唯一方法是用相当笨拙的
这是否有效(即是否保证s将tuple
被优化掉)?还是有另一种保证效率的方法?
(我试过了
但对 gcc 4.8.1 无济于事)。我知道我可以通过定义来避免这个问题
但我宁愿不用这样的额外代码。
c++11 - 放置到 std::vector 的实例的地址无效
我有 2std::vector
秒:
- 到第一个向量,我放置实例
- 到第二个向量,我想存储刚刚放置的实例的地址
但它不起作用,即存储的地址与放置实例的地址不同。
如果这很重要,我在 Linux 上并使用 g++ 5.1 和 clang 3.6 和 -std=c++11。
这是一个说明问题的工作示例。
问题
- 这是正确的行为吗?我猜这是由存储临时实例的地址引起的,但我想知道标准是否允许(只是好奇)。
- 如果上述情况属实,如何解决这个问题?我通过将第一个更改为解决了这个问题,
vector<unique_ptr<Foo>>
但是有什么惯用的方法吗?
c++ - 在 unordered_map 中放置 unordered_set
如何将(静态定义的)unordered_set 添加到 unordered_map,而不必复制 unordered_set?
我试过这个:
和这个:
但它们都没有编译,我得到这些错误(分别):
和
boost - 为什么 boost::lockfree::spsc_queue 没有 emplace?
常规std::vector
具有emplace_back
避免不必要的副本。有理由spsc_queue
不支持吗?emplace
由于某种原因,是否不可能使用无锁队列?