gpt4 book ai didi

c++ - STL 从 vector 中删除与谓词匹配的第一个元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:34 26 4
gpt4 key购买 nike

删除与谓词匹配的 vector 中的第一个元素的有效方法是什么?我将唯一值存储在一个 vector 中,因此我不希望算法搜索整个容器。

目前我在做:

if ((auto it = std::find_if(container.begin(),container.end(),
[](Type& elem){ return elem == value;}) != container.end()))
{
container.erase(it);
}

提前致谢。

最佳答案

只有一个小改进:

container.erase(
std::remove(container.begin(), container.end(), value),
container.end()
);

如果你想使用一元谓词 my_predicate:

container.erase(
std::remove_if(container.begin(), container.end(), my_predicate),
container.end()
);

这具有完全相同的性能特征(一起查找+删除也会触及所有元素),但优雅地避免了特殊情况(!= container.end()),因为它是基于范围的。

如果您不关心保持 vector 稳定(或排序!),您还可以交换找到的元素到 back()pop_back () 这将稍微改善平均(但不是渐近!)运行时间。

不要忘记这也是一个普遍接受的 C++ 习语,因此更容易识别。

关于c++ - STL 从 vector 中删除与谓词匹配的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23491012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com