将 unordered_map 与动态分配的用户定义类一起使用

Posted

技术标签:

【中文标题】将 unordered_map 与动态分配的用户定义类一起使用【英文标题】:Using unordered_map with dyanmically-allocated user-defined class 【发布时间】:2015-02-25 20:22:08 【问题描述】:

所以我有一个类,“房间”,它有以下代码:

class Room

public:
    Room(string name, string desc): name(name), desc(desc) 
    void operator=(const Room room)
    
        name = room.name;
        desc = room.desc;
    
    string getName(); //returns this.name
    string getDesc(); //returns this.desc

private:
    string name; //name of the room
    string desc; //description of the room
;

我的 main.cpp 中有一个 unordered_map 类型的全局变量,如下所示:

unordered_map<string, *Room> rooms; //Room's name is the key

我想在一个函数中动态分配房间并将它们添加到我的地图中。我试图这样做:

void builder()

    Room* room = new Room("Name", "Desc");
    rooms[room->getName()] = room;

...但是我收到了各种编译器警告。我认为这与迭代器或散列有关,或者我没有正确使用指针(这可能都是真的),但大多数情况下 unordered_map 似乎不喜欢使用 Room 或 *Room 进行参数化。我错过了什么吗?

【问题讨论】:

编译器警告是问题的提示。至少将其中一些添加到问题中是有意义的,以便人们可以快速提供帮助。 【参考方案1】:

*Room 存在一些语法错误。我有一些建议

#include <string>
#include <memory>
#include <unordered_map>

using namespace std;

class Room

public:

    Room(string name, string desc)
      : name(name) // This syntax is called initializer list 
      , desc(desc)
    

    

    void operator = (const Room room)
    
        name = room.name;
        desc = room.desc;
    

    string getName()  return name; 
    string getDesc()  return desc; 

private:
    string name; //name of the room
    string desc; //description of the room
;

// Without using unique_ptr you have a memory leak
// because the is not explicitly called the delete operator on pointers
unordered_map<string, std::unique_ptr<Room> > rooms;

void builder()
 
  Room* room = new Room("Name", "Desc");
  rooms[room->getName()].reset (room);

【讨论】:

啊,unique_ptr 似乎解决了我的一些内存管理问题!它还解决了我没有怀疑的潜在语法问题。谢谢。

以上是关于将 unordered_map 与动态分配的用户定义类一起使用的主要内容,如果未能解决你的问题,请参考以下文章

将对象分配到 unordered_map 数组中?

只是回顾与重要考点之连续内存分配管理

只是回顾与重要考点之连续内存分配管理

R:将值分配给数据框中的动态变量时遇到问题

预分配 unordered_map 的线程安全

动态内存分配与指向它的指针变量