【发布时间】:2020-03-10 12:06:43
【问题描述】:
例如。 std::map<Item, std::vector<Item> >。
考虑到 std/boost 中没有,这是否可以用作“快速而肮脏”的树结构(顶部有一些辅助函数,并且考虑到为 Item 实现了less)?
std::unordered_map 会更适合/更有用/有益吗?这需要哈希而不是比较 - 这可能更难实现。
我可以看到一个问题,找到父/所有者必须蛮力遍历整个地图(尽管如果需要,最好将其存储在单独的结构中)。
我不非常喜欢的另一件事是地图条目与带有空子列表的项目的双重含义。
【问题讨论】:
-
只有当你明白树中的每个值都可能出现两次,一次作为值,一次作为键时。另一方面,使用
std::shared_ptr... -
std::vector拥有它的数据,所以如果std::vector中的每个项目也作为std::map中的键出现,那么您将拥有多次相同的对象(恕我直言,这样浪费内存)。 -
@Fareanor 取决于我猜实际上是什么项目 - 有时由于复杂性或其他原因不需要 ptr 或 shared_ptr
-
我想可以存储一个 std::optional
- 用于父查找 - 或者只是一个单独的结构。
-
地图中的键是不可变的,但值不是。因此,如果您使用
vector<Item>中的Item实例作为获取其他项目的键,则无法真正正确地执行此不变量(好吧,您可以用指针“作弊”)