У меня есть vector<Suggestions> finalSuggestions
, который содержит string
word
и некоторые int
num
.Перемещение объекта перед вектором C++
Если это слово соответствует некоторому условию, я хочу перенести этот объект на передний край вектора, удалив его из любой точки.
Я могу вставить в начало списка с vector::insert
for (auto &x: finalSuggestions) {
if (double((x.num)/(topword.num)) < 50)
{
finalSuggestions.insert(finalSuggestions.begin(),x);
break;
}
}
Но я не знаю, как удалить его, откуда он находится в списке.
Например, для некоторого произвольного вектора { 1,2,3,4,50,6,7,8,9 }
, если 50 отвечает критериям, переместить его в передней части списка и удалить его, откуда он был, возвращаясь { 50,1,2,3,4,6,7,8,9 }
. Код, указанный выше возвращает { 50,1,2,3,4,50,6,7,8,9 }
Я искал vector::erase
, но у меня проблемы, и это занимает больше времени, чем нужно.
Я предвижу простое решение (но это, очевидно, не работает)
for (auto &x: finalSuggestions) {
if (double((x.num)/(topword.num)) < 50)
{
finalSuggestions.insert(finalSuggestions.begin(),x);
finalSuggestions.erase(x);
break;
}
}
я читать на стирающем удалить идиомы (здесь это моя реализация):
finalSuggestions.erase(remove(begin(finalSuggestions), end(finalSuggestions), x), end(finalSuggestions));
, но я получает сообщение об ошибке, что я не понимаю:
In instantiation of '_FIter std::remove(_FIter, _FIter, const _Tp&) [with _FIter = __gnu_cxx::__normal_iterator<Suggestion*, std::vector<Suggestion> >; _Tp = Suggestion]':|
Если 'erase' is * занимает больше времени, чем нужно, вы, вероятно, должны использовать другую структуру данных, например,' list'. –
«Принимая дольше, чем нужно», я имею в виду, что я не могу найти решение, а не то, что время выполнения замедляется. Извините за неопределенность – SSOPLIF