私は、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 a1, a2;
a1.x = 1;
a2.x = 2;
sorted_set.insert(&a1);
sorted_set.insert(&a2);
a1.x = 3;
私は関連がある場合、属性の変更要素を消去し、再挿入順にソートされたリストを維持することができんだけど、簿記がになっています痛みが少しあります。私はこれについてすべて間違っているように感じる。並べ替え順序を動的に変更できるときにソートされたリストを保持するためのよりよい方法を提案する人はいますか?変更は予測可能な時期に予測可能な方法で行われますが、私の現在のアプローチはただで、が間違っていると感じています。
要素は一意ではないので、modify()はやや良い方法かもしれません。主な欠点は、あなたがファンクタに割り当てを書く必要があるということです。 –
MultiIndex :: replace()は、私が状況に最も適していると思う提案です。それは、コントロール、効率の可能性、そして私のための細部の世話間の適切なバランスを持っています。私は、実際のオブジェクトではなくポインタを格納しているので、要素のコピーを些細なものにするので、modify()が必要であるとは思わない。提案していただきありがとうございます! – Darryl