Могу ли я каким-то образом перегрузить любой из операторов std :: multiset (как вы делаете с '()' для создания пользовательской функции comapre), чтобы при замене двух элементов в мультимножестве связывались еще два элемента из другого вектора к тем?
Я имею в виду, я на самом деле хочу вставить, скажем, elemetns {a, b, c, d, e} в мультимножество, но я также хочу отслеживать их положение внутри мультимножества, не используя .find ( ). Поэтому я подумал о создании еще одного вектора pos, где pos [k] - это позиция элемента k в мультимножестве.
Итак, если у меня есть этот вектор pos, я все равно должен сделать мультимножество, когда вставляю в него элемент, чтобы не только поместить его в нужное место в мультимножестве, но и изменить pos [] всех замененных элементов .
Я точно не знаю, как мультимножество изменяет / меняет элемент для их сортировки, но могу ли я как-то переопределить это вместо:
swap(a,b);
У меня будет что-то вроде.
swap(pos[a],pos[b]);
swap(a,b)
И если у вас есть какие-либо другие идеи о том, как я мог бы отслеживать положение элемента внутри мультимножества, без использования .find () (который имеет O (N) сложность для равных элементов) было бы здорово!
EDIT
Кроме того, я предполагаю, что мне нужно что-то изменить, чтобы при вставке нового элемента (n) он получил правильную инициализацию для pos[n]
, прежде чем будут произведены какие-либо "перестановки".