如何使用Boost lambdas将remove_if与UUID比较应用?

时间:2014-04-14 21:10:39

标签: c++ boost stl

我有一份UUID列表。我想用给定的UUID删除列表中的元素。我的问题是,如何使用boost lambdas和std::list::remove_if方法实现这一点,这样我就不必在外部编写比较函数。

2 个答案:

答案 0 :(得分:1)

Boost UUID具有可比性,并提供比较运算符。当你知道UUID时,你可以使用std :: remove。

std::vector<boost::Uuid> uuids = /* ... */;
boost::Uuid toRemove;
uuids.erase( std::remove(uuids.begin(), uuids.end(), toRemove), uuids.end() );

如果您愿意,可以使用boost bind来修复一个参数

bool cmp(boost::Uuid const& x, boost::Uuid const& y) {return x == y;}
uuids.erase( std::remove_if(uuids.begin(), 
                            uuids.end(), 
                            boost::bind(cmp, toRemove, _2) )
              uuids.end() );

答案 1 :(得分:1)

如果您的容器是std::list,则您拥有成员函数 std::list::remove()std::list::remove_if()

由于boost::Uuid已经实现了比较operator==(),因此您可以执行以下操作:

std::list<boost::Uuid> uuids;
...
uuids.remove(uuidToRemove);