Задать вопрос
@pynew_user

Как удалить элементы векторов по одинаковому индексу С++?

Есть несколько векторов с одинаковым размером:
vector <string> TYPE;
    vector <int> PRICE;
    vector <string> STATUS;
    vector <string> SURNAME;
    vector <int> NUMBER;


Необходимо найти индекс элемента в векторе NUMBER, который соответствует значению введенному пользователем. Пытаюсь реализовать так:
cout << INPUT; cin >> number_room;
auto result = std::find(NUMBER.begin(), NUMBER.end(), number_room);


В result передается нужный итератор и по нему хочу удалить все элементы данных векторов:
int it = *result;
TYPE.erase(TYPE.begin() + it);
PRICE.erase(PRICE.begin() + it);
STATUS.erase(STATUS.begin() + it);
SURNAME.erase(SURNAME.begin() + it);
NUMBER.erase(NUMBER.begin() + it);


Компилятор выдает Ошибка сегментирования (стек памяти сброшен на диск). В чем ошибка? Пишу конечный автомат, если вдруг нужен подробный код, могу скинуть.
Предположение, что из-за разной типизации векторов. Через remove не могу сделать, тк нужно удалять именно по итератору.
Прошу помочь, буду признателен :)
  • Вопрос задан
  • 60 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
int index = std::distance(NUMBER.begin(), it);
TYPE.erase(TYPE.begin() + index);
PRICE.erase(PRICE.begin() + index);
...


Вы же удаляете элемент по индексу равному значению удаляемого элемента.

Я бы, правда, вместо кучи массивов завел один массив со структурами. Это сильно упростит код, хоть и может в некоторых крайних случаях работать чуть медленее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
может в некоторых крайних случаях работать чуть медленее
не могу представить ситуацию когда один индекс и список объектов будет медленнее нескольких для каждого поля.
подскажи в каких
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы