我有一个 std::map,其中键是指向具有priority() 方法的类的指针,值只是一个 int。映射有一个比较函数,可以通过优先级()来比较键,优先级是键类的整数成员变量。
在某些时候我想改变关键优先事项,例如键 A 的优先级为 1,键 B 的优先级为 5,更改后键 A 的优先级现在为 5,键 B 的优先级为 1。只是为了强调键指向的对象没有更改,juusr 对象成员变量之一是。
所以我希望 std::map 反映这种变化。除了保存所有键/值,清除映射,然后插入保存的值,从而获得新排序的映射之外,是否有一种简单的方法对映射进行“排序”?
自 C++17 起,可以使用
merge()
成员函数将一个对象的元素插入到另一个对象中。它不执行任何分配或释放操作,而只是调整指向原始节点的指针。
在您的情况下,可以使用新的比较器创建另一个 std::map 容器对象,然后将原始对象合并到其中。
示例:
std::map<Key, T, Comp2<Key>> x;
x.merge(y);