gpt4 book ai didi

c++ - 拥有对象并为它们返回 ID 的数据结构

转载 作者:行者123 更新时间:2023-11-28 08:26:42 25 4
gpt4 key购买 nike

我需要一个数据结构来管理 T 对象(通常是 std::string)的整数 ID。它应该支持获取某个对象的 ID,反之亦然,获取某个 ID 的对象:

// if object not seen before: copies and stores object and returns
// new ID, otherwise just returns its ID
int Add(const T& obj);

// if obj not found: returns some specified `NotFound` ID,
// otherwise just returns its ID
int GetId(const T& obj);

// if id not contained: throws exception,
// otherwise returns associated object
const T& GetObj(int id)

它还应该拥有所有那些 T 对象,所以它在内部分配新对象,存储它们并在析构函数中删除它们。

有什么意见吗?你将如何实现?

我在里面用的是这两个容器;每个对象指针都存储在:

// quickly retrieve the ID
std::map<const T*, int, CompareByValue> Obj2IdMap;
// quickly retrieve the object, given an ID
std::vector<const T*> Id2ObjMap;

还有其他可能有用的数据结构吗?或者整个对象 ID 管理器是否已在某些库中可用?

最佳答案

It should also own all those T objects, so internally it allocates new objects, stores them and deletes them in the destructor.

Any comments? How would you implement that?

我会使用 boost shared_ptr管理对象。

Are there any other data structures that might help? Or is this whole object ID manager already available in some library?

查看此 Stack Overflow 线程:Using STL containers for multiple keys .我认为这是解决您问题的一个很好的替代解决方案,但老实说,我也在很多项目中使用了与您完全相同的方法。

关于c++ - 拥有对象并为它们返回 ID 的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823032/

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