Вы можете скопировать все элементы вектора в список, кроме индекса во втором контейнере, а затем вернуться в вектор. Даже с вашим алгоритмом перехода от конца вектора к фронту в вашем векторе происходит много работы.
Сделайте ваш второй контейнер картой, чтобы он автоматически сортировал ваши значения.
редактирование:
Ответить на комментарий
Стоимость обслуживания карты в худшем случае такая же, как поддержание другой структуры (списка или вектора) и последующая ее сортировка. Если вы уже делаете это, вы можете оставить его на карте. Не имеет смысла жаловаться на издержки карты по сравнению с накладными расходами на сортировку списка.
Что касается производительности моего предложенного алгоритма, если m - это количество элементов, которые нужно удалить, а n - общее количество элементов, то это приводит к O (n - m).
Конечно, это в основном просто смешная попытка оптимизировать вектор.
1 - Вы не должны использовать вектор, если хотите удалить произвольный доступ. Это не то, в чем они хороши, используйте список, если это вообще возможно. И так как вы, кажется, гораздо больше интересуетесь относительным порядком, а не абсолютным индексом, мне интересно, зачем вообще нужен вектор. Если вы изложили всю проблему, возможно, существует общее решение, позволяющее использовать наиболее эффективную структуру данных для ее решения.
2 - Вместо сохранения второй структуры данных отметьте элементы, которые необходимо удалить непосредственно в их контейнере. Тривиальным способом является использование контейнера , использование контейнера > и использование char для отслеживания состояния элемента.
Если вы сделаете 1 и 2, вы полностью удалите все копии и получите намного более эффективную реализацию.