代码之家  ›  专栏  ›  技术社区  ›  den bardadym hakatashi

GCC树STL数据容器[副本]

  •  1
  • den bardadym hakatashi  · 技术社区  · 14 年前

    可能重复:
    remove_if equivalent for std::map

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

    std::multiset < boost::shared_ptr < CEntity > > m_Entities;
    

    remove_if 这样地:

    std::remove_if(m_Entities.begin, m_Entities.end(), MarkedForDestroy);
    

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

    typedef typename _Rep_type::const_iterator            iterator;
    typedef typename _Rep_type::const_iterator            const_iterator;
    

    我很震惊。我谷歌这一刻,更好的是,我发现这并不矛盾的标准。set也一样。

    如果standart算法不起作用,这怎么会矛盾呢?我怎样才能更好地更换集装箱?

    3 回复  |  直到 7 年前
        1
  •  5
  •   Community Mofi    7 年前

    你不能使用 std::remove_if 关联容器上的算法。你需要写一个 for 循环并使用 erase remove_if equivalent for std::map

        2
  •  1
  •   Eugen Constantin Dinca Chris Lohfink    14 年前

    所有标准有序/关联容器(map、set、multimap、multiset)都有不可变的键(只是键而不是整个容器)。

        3
  •  -3
  •   Community Mofi    7 年前

    因为multiset(还有set)是 容器,即容器中的元素不能 被改进的 到位 ,可以删除、修改和(重新)插入它们。

    例如,见:

    元素是关键的地方 嵌套类型迭代器和