У меня есть векторные пары целых чисел как в первой, так и в второй позиции, а вход довольно конкретный.
Во-первых, у меня есть входы, которые все входят в первые пятна вектора, но потом идет второй массив входов, который должен идти во вторую позицию.
Однако, что бы я хотел сделать, есть ли условие, что если я нахожу вход второго места больше определенного значения (mana
, в моем случае переменная), я бы просто не поставил его в пару векторов и удалить первый элемент этого индекса из первой позиции, и мне трудно понять, как его кодировать. Вот часть этого кода:Удаление элементов по индексу в векторных парах
vector<pair<int, int>>spellOne;
for (int i = 0; i < nSpellOne; i++)
{
scanf_s("%d", &input);
spellOne.back().first = input;
}
for (int i = 0; i < nSpellOne; i++)
{
scanf_s("%d", &input);
if (input > mana)
{
// removing the element on .first position at i index
}
else
{
spellOne.at(i).second = input;
}
}
Может кто-нибудь помочь мне о том, как сделать это, и если это вообще возможно, или я должен переключиться на другой тип массивов? Я также рассматривал использование карт, но это было невозможно, так как есть высокая вероятность получить одно и то же значение дважды в первом/втором месте в векторе, поэтому я не могу использовать их в качестве ключа.
Вам нужно удалить всю пару с индексом 'i', но затем уменьшить' i' на один тоже (осторожно, чтобы не дать отрицательное значение 'i', хотя) – gsamaras
я пытался делать, что с стиранием функция для векторов, но я получаю сообщение об ошибке, поскольку мне нужно указать либо первую, либо вторую позицию, а когда я создаю программу для удаления spellOne.erase (spellOne.begin() + i), программа вылетает, заявляя смещение векторного итератора вне диапазона. – Sara
Да, это имеет смысл, Сара, проверьте мой пример, который я опубликовал в качестве ответа, должно быть достаточно, чтобы вы смогли повысить! ;) – gsamaras