相关疑难解决方法(0)

在C++中unordered_map :: emplace和unordered_map :: insert有什么区别?

std::unordered_map::emplacestd::unordered_map::insertC++有什么区别?

c++ unordered-map c++11

26
推荐指数
1
解决办法
2万
查看次数

如果密钥已存在,则将unique_ptr插入到地图中而不删除指针的有效方法

简单的方法是显而易见的

std::map<int,std::unique_ptr<something>> mymap;

auto f = mymap.find(5);
std::unique_ptr<something> myptr;

if (f == mymap.end())
    mymap.insert({5, std::move(myptr)});
Run Code Online (Sandbox Code Playgroud)

但是,这看起来效率不高,因为我必须在地图中找到两次键.一个用于检查密钥是否不存在,并且插入功能也将执行相同的操作.

如果我只是使用mymap.insert({5, std::move(myptr)});那么我的唯一ptr(myptr)如果pair.second返回false(键已经存在)就消失了.

编辑:

显然答案是在C++ 17上try_emplace,并且它已经在我正在使用的编译器中可用(vs2015),而且由于我正在处理个人项目,我可以负担得起它.

c++ c++17

8
推荐指数
1
解决办法
3938
查看次数

0xC0000005:C++中的访问冲突

这是我的代码:

class Base
{
public:
    virtual void show() const = 0;
};

class Child : public Base
{
private:
    static const int i = 1;
public:
    virtual void show() const
    {
        cout << i;
    }
};

map<int, const Base &> myMap{
    { 0, Child() },
    { 1, Child() },
};

Base & b = Child();

int main()
{
    b.show();

    myMap.at(0).show(); // This provokes the error

    system("pause>NUL");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在尝试使用global(或static)数据,这将调用某些virtual函数.当我在测试Base & b = …

c++ virtual

3
推荐指数
1
解决办法
468
查看次数

标签 统计

c++ ×3

c++11 ×1

c++17 ×1

unordered-map ×1

virtual ×1