我可以以某种方式重载 std::multiset 的任何运算符(就像您使用 '()' 创建自定义comapre 函数一样),以便当交换多重集中的2个元素时,另一个向量中的另外2个元素是否链接到那些?
我的意思是,我实际上想在多重集中插入元素 {a,b,c,d,e},但我也想跟踪它们在多重集中的位置,而不必使用 .find()。所以我考虑创建另一个向量 pos,其中 pos[k] 是元素 k 在多重集中的位置。
所以,如果我有这个向量 pos,当我在其中插入一个元素时,我仍然必须制作 multiset,不仅要将它放在 multiset 中的正确位置,还要更改所有交换元素的 pos[]。
我不完全知道 multiset 如何更改/交换对它们进行排序的元素,但我可以以某种方式覆盖它而不是:
swap(a,b);
我会有类似的东西。
swap(pos[a],pos[b]);
swap(a,b)
如果您对如何在不使用 .find() (相等元素具有 O(N) 复杂度)的情况下跟踪元素在多重集中的位置有任何其他想法,那就太好了!
编辑
而且,我想我必须改变一些东西,以便当我插入一个新元素 (n) 时,它会pos[n]
在进行任何“交换”之前得到正确的初始化。