-1

我需要创建一个从整数到对象的双向映射。我不能使用,boost::bimap因为我的对象在放入映射后被修改(它们正在以不影响映射的方式进行修改)。

简单的解决方案是两个使用 avector和 an unordered_map

vector<MyClass> _vector;
unordered_map<MyClass, size_t> _map;

但是,这会维护每个 的两个副本MyClass,我不希望这样。

我可以将MyClass *指针保存在其中一个容器中,并使用另一个容器的存储,但我担心vector或者unordered_map可以移动实例(在重新分配向量或调整哈希表大小时)。

任何帮助,将不胜感激。

4

2 回答 2

2

您不能将对象存储在一个向量中,而将映射的索引保存在另一个向量中吗?

std::vector<MyClass> vC;
std::vector<unsigned int> vM;

然后vC[vM[i]]vC[i]对象的映射类。

但是,如果您提供有关您尝试做什么的更多详细信息(映射是自反的吗?所有类都有映射类还是只有一些?您需要多久修改一次对象?)我们可以提供更多帮助。

于 2015-02-12T23:49:32.397 回答
0

您可以std::shared_ptr<MyClass>在主容器和std::weak_ptr<MyClass>引用容器中使用 a。

不幸的是,您没有提供足够的上下文或要求,给您一个简洁的例子。无论如何,您还应该有一些同步管理,从引用容器中删除条目,一旦这些条目从主容器中删除,尽管std::weak_ptr这更容易实现。

这不仅可以提高内存效率,还可以让您不必保持其他不相关的副本MyClass同步。

于 2015-02-12T21:40:52.090 回答