程序的作用如下:
该列表包含产品信息,包括产品ID,名称,价格等。
有关如何操作的任何提示?
答案 0 :(得分:1)
您可以使用multiset / multimap 他们有erase operation删除所有出现的密钥
答案 1 :(得分:1)
您应该使用结构或类来存储产品信息,因此它将位于列表的单个元素中:
struct Product {
unsigned int id;
std::string name;
float price; // you could also use int and represent the cents
};
typedef std::list<Product> ProductList;
void removeProduct(ProductList & productList, unsigned int id) {
ProductList::iterator it = productList.begin();
while (it != productList.end()) {
if (it->id == id) {
it = productList.erase(it);
}
else ++it;
}
}
答案 2 :(得分:0)
使用erase-remove idiom。假设你正在使用C ++ 11 lambdas使这很容易。
#include <vector>
#include <algorithm>
class Product
{
public:
unsigned int id;
};
void deleteProduct( std::vector<Product>& products, unsigned int productId )
{
products.erase( std::remove_if( products.begin(), products.end(),
[&productId] ( const Product& product )
{
return product.id == productId;
}), products.end() );
}
remove_if
算法将匹配到列表末尾的元素移动。然后它将迭代器返回到可以擦除的第一个元素。 erase
实际上会从列表中删除数据。