小编SSO*_*LIF的帖子

将对象移动到矢量c ++的前面

我有一个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)

c++ vector

5
推荐指数
2
解决办法
7311
查看次数

标签 统计

c++ ×1

vector ×1