std::multiset の演算子のいずれかを何らかの形でオーバーロードして ('()' を使用してカスタム比較関数を作成するように)、マルチセット内の 2 つの要素が交換されたときに、別のベクトルの別の 2 つの要素がそれらにリンクされるようにすることはできますか?
つまり、実際にはマルチセットに要素 {a、b、c、d、e} を挿入したいのですが、.find() を使用せずに、マルチセット内の位置を追跡したいのです。そこで、別のベクトル pos を作成することを考えました。ここで、pos[k] は、マルチセット内の要素 k の位置です。
したがって、このベクトル pos がある場合でも、要素を挿入するときに multiset を作成する必要があります。これは、要素を multiset 内の適切な場所に配置するだけでなく、スワップされたすべての要素の pos[] を変更するためでもあります。
マルチセットが要素をどのように変更/スワップしてソートするのか正確にはわかりませんが、次の代わりにそれをオーバーライドできますか:
swap(a,b);
のようなものがあります。
swap(pos[a],pos[b]);
swap(a,b)
また、.find() (等しい要素に対して O(N) の複雑さを持つ) を使用せずに、マルチセット内の要素の位置を追跡する方法について他のアイデアがある場合は、素晴らしいでしょう!
編集
pos[n]
また、新しい要素 (n) を挿入すると、「スワップ」が行われる前にの正しい初期化が行われるように、何かを変更する必要があると思います。