检测插入std :: set的坏项

Mr.*_*Boy 1 c++ algorithm stl

假设我的设置中有自定义类型,并且只有在某些属性上所有项目具有相同值时才设置/排序...如果插入了具有不同值的项目,则模型被搞砸了,我想要保护这个.

我想也许比较函数可能是我们可以测试它(作为断言或异常)的地方,以标记问题和/或防止项目被插入.例如,在TypeName上,如果重要属性不相等,则operator <()始终返回false.

这合理吗?

Jef*_*ter 6

我想把它放在比较器中可能会有问题,因为当它被调用时你没有得到任何保证.也许一些神话般的实现在项目数量较少时将项目存储在列表中,并且直到稍后才调用比较器?

可能最简单的方法是将std::set执行这些断言的保护性外层包装起来.

class MySet {
  private:
     std::set<myFunkyType> myType;

  public:
     void insert(myFunkyType type) {
        assert(!type.isFunky(), "funk violation");
        // and so on
     }

     // all other members other than insertion or mutation just delegate to the
     // underlying set
Run Code Online (Sandbox Code Playgroud)

}