我有一个vector<Suggestions> finalSuggestions包含一个string word和一些int num.
如果这个单词满足某些条件,我想将该对象移动到向量的前面,将其从任何地方移除.
我能够插入到列表的开头 vector::insert
for (auto &x: finalSuggestions) {
if ( double((x.num)/(topword.num)) < 50)
{
finalSuggestions.insert(finalSuggestions.begin(),x);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何从列表中的位置删除它.
例如,对于某些任意向量{ 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;
}
}
Run Code Online (Sandbox Code Playgroud)
我读了擦除删除习语(这是我的实现):
finalSuggestions.erase( remove( begin(finalSuggestions), end(finalSuggestions), x ), end(finalSuggestions) );
Run Code Online (Sandbox Code Playgroud)
但我得到一个我不明白的错误:
In instantiation of '_FIter std::remove(_FIter, _FIter, const _Tp&) …Run Code Online (Sandbox Code Playgroud)