gpt4 book ai didi

c++ - 在容器中删除 std::map 元素的有效方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:15:06 30 4
gpt4 key购买 nike

有一个对象像:

std::map<std::string, MyClass> data;

其中 MyClass 的复制成本很高。在某些应用程序运行流时刻,我需要执行一个操作,通过键(通常的 operator[])检索 MyClass 对象,但我需要将这个对象从容器中分离出来。直接解决方案是复制到局部变量,然后在容器中删除。但是复制对于 MyClass 来说是一项繁重的操作。有没有办法(可能在 C++11 术语中)避免复制/删除?可能有些将语义从容器移动到局部变量?不知道该怎么做。

最佳答案

我立即想到了两种处理此问题的好方法。可能最简单的是将数据定义为

std::map<std::string, MyClass*> data;

这意味着它现在拥有指针。您必须自己实例化 MyClass 的元素,存储在您的 map 中,然后从 map 中删除而不影响底层对象本身。如果您愿意,智能指针可以简化对象管理。

另一种方法是为 MyClass 实现移动语义,并确保 MyClass 的移动运算符得到更优化。如果对所有类成员进行移动操作仍然很昂贵,那么进行非常快速的移动运算符的一种相当有效的方法是让 MyClass 维护一个指向保存其所有数据的结构的指针,并在类构造期间初始化指针并在析构函数中删除它。此时的移动运算符实际上只是将指针从源移动到目标。不幸的是,这为您在 MyClass 中的所有其他操作增加了一个间接级别。

关于c++ - 在容器中删除 std::map 元素的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34680701/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com