Могу ли я как-то перегрузить любой из операторов std :: multiset (например, вы делаете с '()' для создания пользовательской функции comapre), так что, когда 2 элемента в мультимножестве меняются местами, то есть еще 2 элемента из другого вектора, связанного с ними?Std :: multiset, отслеживать позиции позиций вставлены
Я имею в виду, я действительно хочу вставить, например, 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
А также, я думаю, что я должен что-то изменить, так что, когда я вставить новый элемент (п) он получит правильную инициализацию pos[n]
, до того, как «свопы» сделаны.
Идея состоит в том, что я знаю, как импортировать структуру кучи, чтобы делать то, что мне нужно, но я хочу сделать это только с использованием функций в библиотеке std C++, потому что мне нужно как можно быстрее закодировать «программирование». – Cristy
@ Cristy- Какие операции с кучей вам нужно поддерживать? Можете ли вы использовать priority_queue? – templatetypedef
Мне нужно: вставить, удалить первый элемент и обновить при изменении значения одного элемента. Теперь я использую multiset, и когда я обновляю, я нахожу позицию этого элемента, удаляю его из кучи, обновляю значение элементов, вставляю его в кучу. – Cristy