【发布时间】:2009-07-28 18:45:20
【问题描述】:
我使用 STL std::multiset 作为指针的排序列表。排序顺序由所指向的项目的属性确定,类似于这个简化示例:
struct A
{
int x;
};
bool CompareAPointers(const A* lhs, const A* rhs)
{ return lhs->x < rhs->x; }
std::multiset<A*, CompareAPointers> sorted_set;
复杂之处在于用于对集合进行排序的属性的值可能会发生变化(您可以在上面的示例中更改 A.x),这会导致排序顺序不正确:
A a1, a2;
a1.x = 1;
a2.x = 2;
sorted_set.insert(&a1);
sorted_set.insert(&a2);
a1.x = 3;
当相关属性发生变化时,我可以通过擦除和重新插入元素来保持列表的排序,但是簿记变得有点痛苦。我觉得我对这一切都错了。当排序顺序可以动态更改时,任何人都可以建议一种更好的方法来保持列表排序吗?这些变化在可预测的时间以可预测的方式发生,但我目前的方法感觉是错误的。
【问题讨论】: