多集键中的"Don't Care"字段
"Don't Care" fields in multiset keys
我有一个复合数据类型:
struct Key {
optional<int> a;
optional<int> b;
optional<int> c;
};
我也有一个多集,multiset<Key>
。例如,它包含
{1, 2, 3}
{1, NULL, 3}
{NULL, 2, 3}
{NULL, NULL, 3}
我想获得这个多集中与{1, 2, 3}
匹配的所有对象。但是有一个问题:NULL
字段应该与任何东西匹配。例如,{1, 2, 3}
与{1, NULL, 3}
匹配。
我尝试定义一个忽略NULL值的比较器(<
)。例如{1, NULL, NULL} == {NULL, 2, 3}
。但是它不遵循弱严格排序,它给了我错误的结果。
我该怎么做呢?
你的问题比不遵守弱严格排序规则更严重。你的等式甚至不是等价关系:{1,NULL,3}匹配{1,2,3}和{1,4,3},但是{1,2,3}不匹配{1,4,3}。我的结论是,您不能依赖任何标准容器来满足捕获所有值的匹配要求。
如果您只想存储它们,您应该尝试使用unordered_set
或unordered_multiset
,因为它将允许您存储值而没有任何问题。但是您必须手动实现一个方法来搜索容器中的匹配项。
注意:我不建议您创建标准容器的子类(这通常是一个错误的想法,因为它们的设计不允许派生,没有虚析构函数…),而是在自定义类中包含一个,并将存储委托给它。
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 声明没有默认构造函数的字段
- C++内存模型和位字段的最大序列
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- C++ win32 如何使密码字段可选并启用复制和粘贴?
- 如何通过UDP接收QByteArray并将其解析为位字段结构?
- 仅匹配集合中的某些字段
- 结构字段名称与 GDB 中的 STL 数组冲突
- 如何使用位字段将数据从二进制文件复制到结构中?
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何避免在数据结构中包含存储为字段的类?
- 聚合初始化和删除的复制构造函数,也称为不可复制的 obejcts 作为字段
- 多集键中的"Don't Care"字段