【发布时间】:2010-02-10 11:44:19
【问题描述】:
我正在寻找一种 C++ 数据结构,它可以让我将对象与唯一的数值(键)相关联,并在从容器中删除相应对象后重新使用这些键。所以它基本上有点像混合地图/队列结构。我目前的实现是一个
std::map<size_t, TObject>
然后我插入这样的对象:
size_t key = (m_Container.end()--)->first + 1;
m_Container[key] = some_object;
这对我的目的来说很好(我永远不会分配超过 size_t 个对象);但我仍然想知道是否有更专业的容器可用,最好已经在 stl 或 boost 中,或者有办法使用另一个容器来实现这个目标。
(当然我可以,而不是在我的地图中获取最高的键并添加一个,每次都通过地图并搜索第一个可用的键,但这会将复杂度从 O(1) 降低到 O(n)如果 API 很简单,那就太好了
size_t new_key = m_Container.insert(object);
)。
有什么想法吗?
【问题讨论】:
-
容器为空时会中断 (
end==begin)。另外,您可能错过了m_Container.back()。 -
在我的代码中,我确实检查了地图是否为空,这只是为了说明。此外,std::map 没有 .back()。
-
m_Container.rbegin()->first 可能比 (m_Container.end()--)->first ... 更具可读性?
-
是的。尽管如此,随着情人节即将到来,我认为 ()--)-> 会很好地融入花卉主题;)
-
注意:后递减运算符 (--) 递减左值表达式。 BUT 表达式的结果(返回给表达式进行进一步处理)是原始值。因此,用于首先获取的运算符 -> 被用于 end() (无效操作)。
标签: c++ data-structures stl