自动重新排序树

时间:2017-07-11 21:42:06

标签: c++

有没有办法让树自动重新排序其元素,或者在调用某个方法时(不是在插入新元素时)?

我想要一棵树,即一组像这样的小结构:

struct item
{
    int value;
};

集合:

set<item> items;
auto p = items.insert(...);

我希望有一个地图将迭代器保存到set:

中的项目中
map<name, items::iterator> items_map;
items_map["abc"] = p.first;

过了一段时间后,我想在地图上进行查找并获取指向set中项目的指针以增加其值。

auto iter = items_map["abc"];
iter->value++;

现在我希望设置自动重新排列以便它反映更新的值,我的意思是我希望设置自动排序(或者在调用某些方法之后)。

有没有办法在STL中使用当前容器?

1 个答案:

答案 0 :(得分:0)

  

我想在地图上进行查找并获取指向set中项目的指针以增加其值。

     

有没有办法在STL中使用当前容器?

没有。 std::set的元素可能无法修改。因此,迭代器是常量,您无法使用它们来修改元素。

实现类似效果的简单方法是删除旧元素,并插入修改后的副本。但是,任何用于指向旧元素的迭代器当然会因删除元素而失效,并且不会指向修改过的元素。

  

有没有办法让树自动重新排序其元素,或者在调用某个方法时(不是在插入新元素时)?

当然,但标准库中没有这样的结构。