前スレ>>935でスマポ関連の質問をした者ですが、すみませんがもう一度質問させてください。
今の糞コードはこんな感じです。

class A {
 vector<shared_ptr<B>>; // 要素は数十個
};
class B {
 vector<shared_ptr<C1>>; // 要素は数万個、要素内の状態に応じてソート
 vector<shared_ptr<C2>>; // 同上
 vector<shared_ptr<C3>>; // 同上
 weak_ptr<A>;
};
class C1 {
 weak_ptr<A>;
 weak_ptr<B>;
};
class C2 {
 vector<weak_ptr<C1>>; // 要素は数十個
 weak_ptr<A>;
 weak_ptr<B>;
};
class C3 {
 vector<weak_ptr<C2>>; // 要素は数十個
 weak_ptr<A>;
 weak_ptr<B>;
};

クラスの階層としては A→B→C1,C2,C3 ですが、以下を満たした上での適切なクラス設計が分かりません。
・クラスの異層間および同層間の参照がある
・B内のvectorを要素の状態に応じてソートする

これらのスマポやコンテナをどう変えるのが適切なんでしょうか?