按值将对象包含到std :: map中,而不复制

时间:2018-09-25 17:49:29

标签: c++ stdmap emplace

我在将具有非平凡构造函数的对象放入映射值时遇到问题。它与this问题几乎相同,但是没有可变部分。例如,考虑具有两个参数构造函数的简单产品类型foo

struct foo {
  std::string x;
  float y;
  foo(std::string _x, float _y) : x(_x), y(_y) { }
  ~foo() { std::cerr << "foo destructing\n"; }
};

以下说明了问题。

void test() {
  { // scope
    std::map<int,foo> m;
    // m.emplace(44,"bar",3.14); // this is sort of what I want
    m.emplace(44, foo("bar",3.14f)); // works, but copys
    std::cout << "exiting scope\n";
  }
  std::cout << "exited scope\n";
}

对此有简单的解决方法吗?

0 个答案:

没有答案