gpt4 book ai didi

c++ - 删除除 'largest' 之外的所有 vector 元素

转载 作者:太空狗 更新时间:2023-10-29 21:03:30 26 4
gpt4 key购买 nike

给定一个这样的 vector :

struct product {
float price;
float shipping;
};

vector<product> products;

除了shipping to price ratio 最大的产品之外,我如何从 vector 中删除所有产品?

我尝试将迭代器保持为迄今为止找到的最高迭代器...

vector<product>::iterator it = products.begin();
vector<product>::iterator largest = products.begin();

while (it != products.end())
{
if (it->shipping / it->price > largest->shipping / largest->price)
{
products.erase(largest);
largest = it;
++it;
}
else
{
it = products.erase(it);
}
}

这一切都很好,但如果 vector 中的第一个元素具有最高比率(它被删除),它就会失败。如果 largest 未初始化,然后在 if 语句中检查它,我可以解决这个问题(我认为),但是我没有真正的方法来做这个可以分辨(How to check if the iterator is initialized?)。

有什么建议吗?

最佳答案

 vector<product> products;
//populate products

products.erase(
products.begin(),
std::max_element(
product.begin(),
producted.end()
)
);
products.resize(1u);

这假设您有一个适合您的类型的运算符<,如果没有,请创建一个比较函数并将其作为第三个参数提供给 max_element。

编辑:

这也起作用,在这种情况下,不是显式地找到元素并删除任一侧的元素,而是排序以找到 1 个元素,然后我们可以进行一次删除。

 vector<product> products;
//populate products
std::nth_element(
products.begin(),
products.begin()+1,
products.end(),
std::greater<product>()
);
products.resize(1u);

关于c++ - 删除除 'largest' 之外的所有 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13279990/

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