c++ - 集合查找中的精确比较

标签 c++ stl insert find set

我有一个结构(比如说 Foo ),它只包含字符串和一个 double ,我创建了一个集合,它还有一个比较器类,用于比较这些属性的一个子集。所以我的声明看起来像:std::set<Foo, FooComp>

当我调用 find()我会期望 Foo 的所有属性吗?用作 key 或将 FooComp使用?我假设是前者。

我问的原因是我遇到了一个问题,即使我尝试使用 find() 也没有在集合中检测到先前添加的对象。检查它的存在。我只能假设这已经发生了,因为 double 中可能存在细微差别? double 属性未在比较器中使用,但可能构成键的一部分。

如有任何想法,我们将不胜感激。

最佳答案

FooComp 需要表示一个二元函数,它接受对 Foo 的 2 个引用,并确定左边的引用是否在逻辑上小于右边的引用。

struct FooComp
{
  bool operator()( const Foo& left, const Foo& right ) const;
};

并以“严格排序”实现 operator()

  • !FooComp( foo1, foo1 )
  • FooComp( foo1, foo2 ) => !FooComp( foo2, foo1 )
  • FooComp( foo1, foo2 ) && FooComp( foo2, foo3 ) => FooComp( foo1, foo3 )

实际上第一个公理可以从第二个公理推导出来,所以你只需要第二个和第三个公理。

关于c++ - 集合查找中的精确比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4957497/

相关文章:

c++ - QtOpenGL 加载带有QImage纹理的obj格式

json - postgresql json to columns error Character with value 必须转义

c++ - std::vector 大小?

c++ - 共享库中静态函数成员的销毁顺序

python - NURBS 曲面到水密 STL

c++ - 使用 emplace_back 指向 const 对象的指针

MySql:插入一行并获取内容

PHP - MySQLi 插入不适用于用户注册

c++ - 一次又一次尝试在给出错误路径的同时打开文件

c++ - 在 C++ STL 映射中,删除具有重复值的条目