C++ 自动重新排序树

C++ 自动重新排序树,c++,C++,有没有一种方法可以让树自动对其元素重新排序,或者在调用某个方法时(而不是在插入新元素时) 我希望有一棵树,即一套小型结构,如下所示: struct item { int value; }; 这一套: set<item> items; auto p = items.insert(...); 现在我想让集合自动重新排列,以反映更新后的值,我的意思是我想让集合自动排序(或者在调用某个方法之后) STL中的当前容器是否有这样做的方法 我想在地图上进行查找,并获取指向集合中的项目的

有没有一种方法可以让树自动对其元素重新排序,或者在调用某个方法时(而不是在插入新元素时)

我希望有一棵树,即一套小型结构,如下所示:

struct item
{
    int value;
};
这一套:

set<item> items;
auto p = items.insert(...);
现在我想让集合自动重新排列,以反映更新后的值,我的意思是我想让集合自动排序(或者在调用某个方法之后)

STL中的当前容器是否有这样做的方法

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

auto iter = items_map["abc"];
iter->value++;
STL中的当前容器是否有这样做的方法

不可以。不能修改
std::set
的元素。因此,迭代器是常量,不能使用它们修改元素

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

有没有一种方法可以让树自动对其元素重新排序,或者在调用某个方法时(而不是在插入新元素时)


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

就像优先级队列中的
change\u priority()
一样?您无论如何都不能更改集合中的项目。在映射中存储迭代器感觉也是个坏主意。只需将项放在映射中,因为它包含唯一的元素,所以您应该考虑增加
可以做什么…因为迭代器在所有情况下都会失效time@Charles-那就是我们你都做不到,它们是常量,你建议我自己构建这样的结构是什么样的?你没有解释太多你使用这个结构的目的,但是因为你显然需要按单词查找,还需要按其他谓词排序遍历,所以你似乎需要一个多索引容器。就像Boost MultiIndex?根据本页(),Boost MultiIndex提供了一个方法“modify”,它完全符合我的要求!这太棒了。“所有接口都会得到通知,并且可以计算新的哈希值。”
auto iter = items_map["abc"];
iter->value++;