GCC树STL数据容器

den*_*dym 1 c++ gcc stl set multiset

可能重复:
remove_if等效于std :: map

昨天我写了一个程序,它使用multiset来存储这样的元素:

std::multiset < boost::shared_ptr < CEntity > > m_Entities;
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用这样的标准算法remove_if:

std::remove_if(m_Entities.begin, m_Entities.end(), MarkedForDestroy);
Run Code Online (Sandbox Code Playgroud)

但是编译失败了,因为如果我们在GCC 4.4中看到set和multiset的实现,我们看到:

typedef typename _Rep_type::const_iterator            iterator;
typedef typename _Rep_type::const_iterator            const_iterator;
Run Code Online (Sandbox Code Playgroud)

我感到震惊.我这一刻谷歌更好,我发现这与标准不矛盾.集合相同.

如果标准算法不起作用,这怎么会不相矛盾?我怎样才能更好地更换容器?

Nav*_*een 5

您不能std::remove_if在关联容器上使用算法.您需要编写for循环并使用该erase方法删除元素.有关更多详细信息,请参阅此类似问题remove_if等效于std :: map.