对 std::map 进行排序而不删除和重新插入条目

问题描述 投票:0回答:1

我有一个 std::map,其中键是指向具有priority() 方法的类的指针,值只是一个 int。映射有一个比较函数,可以通过优先级()来比较键,优先级是键类的整数成员变量。

在某些时候我想改变关键优先事项,例如键 A 的优先级为 1,键 B 的优先级为 5,更改后键 A 的优先级现在为 5,键 B 的优先级为 1。只是为了强调键指向的对象没有更改,juusr 对象成员变量之一是。

所以我希望 std::map 反映这种变化。除了保存所有键/值,清除映射,然后插入保存的值,从而获得新排序的映射之外,是否有一种简单的方法对映射进行“排序”?

c++ sorting stdmap
1个回答
0
投票

自 C++17 起,可以使用

merge()
成员函数将一个对象的元素插入到另一个对象中。它不执行任何分配或释放操作,而只是调整指向原始节点的指针。

在您的情况下,可以使用新的比较器创建另一个 std::map 容器对象,然后将原始对象合并到其中。

示例:

std::map<Key, T, Comp2<Key>> x;
x.merge(y);
© www.soinside.com 2019 - 2024. All rights reserved.