stl 或一般情况下是否存在一种“反向”关联容器?例如,我想要一个容器,其中相同的元素由一组键共享。
假设我的密钥是int
,那么我将拥有例如:
container.at(3) -> some object A
container.at(4) -> same object A
container.at(1) -> other object B
对于不同的操作,该容器(理想情况下)具有与 std::map 相同的复杂性。这样的事情可能吗?
我正在考虑首先使用 a std::map<int, T*>
,其中几个索引指向同一个对象,但是当从地图中删除一个项目时,运行时间在 O(n) 中,因为您必须检查其他项目以查看您是否需要删除Tobject
在 stl 或 boost 中是否已经“本地”存在这种容器?
编辑:一些使用示例:
container<int, myClass> myContainer;
myClass obj(...); //new object
myContainer.insert(3, obj); //insert object for specific key
myContainer.insert(2, obj); //insert same object for specific key, since both objects would compare equal we would actually not "insert" a new object but have it shared by both keys
myContainer.duplicate_object(2,5); //key 5 also has the same object as key 2 (and 3)
myContainer.getAllKeys(2); //would return 2,3 and 5 since they all reference the same object as key 2
myContainer.removeKey(3);
myContainer.removeKey(2);
myContainer.removeKey(5); //would destroy the object here, not before