我有一个包含string
词和一些int
num的vector<Suggestions> finalSuggestions
。
如果这个词满足某个条件,我想将该对象移动到向量的前面,并从原来的位置中删除它。
我可以使用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
操作所需的时间比预期的长,你可能需要使用另一种数据结构,例如list
。 - Anton Savin