如何在c ++中一次从列表中删除几个元素?

时间:2013-05-15 02:12:05

标签: list stl

程序的作用如下:

该列表包含产品信息,包括产品ID,名称,价格等。

  1. 用户输入产品ID
  2. 检查列表中是否已存在的ID
  3. 因此,如果id与列表中的id匹配,则会删除该ID的所有元素(产品ID,名称,价格等)
  4. 有关如何操作的任何提示?

3 个答案:

答案 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实际上会从列表中删除数据。