C++ 为什么';t count返回集合C+的正确值+;对象
我有一个包含struct数据元素的set对象。但是,当对象不包含在set对象中时,count似乎返回“1”。看起来它只是在查看结构的第一个元素。我做错了什么?下面是我的代码示例:C++ 为什么';t count返回集合C+的正确值+;对象,c++,C++,我有一个包含struct数据元素的set对象。但是,当对象不包含在set对象中时,count似乎返回“1”。看起来它只是在查看结构的第一个元素。我做错了什么?下面是我的代码示例: 我确实实现了“如果lhs.alert\u uuid==rhs.alert\u uuid,这将返回false,我怀疑这是错误的 inline bool operator<(const drugKey_tp &lhs, const drugKey_tp &
我确实实现了“如果
lhs.alert\u uuid==rhs.alert\u uuid
,这将返回false,我怀疑这是错误的
inline bool operator<(const drugKey_tp &lhs,
const drugKey_tp &rhs) {
return (lhs.alert_uuid < rhs.alert_uuid &&
lhs.ndc_code < rhs.ndc_code &&
lhs.claim_id < rhs.claim_id &&
lhs.ndc_code < rhs.ndc_code);
};
inline bool操作符如果lhs.alert\u uuid==rhs.alert\u uuid
,这将返回false,我怀疑这是错误的
inline bool operator<(const drugKey_tp &lhs,
const drugKey_tp &rhs) {
return (lhs.alert_uuid < rhs.alert_uuid &&
lhs.ndc_code < rhs.ndc_code &&
lhs.claim_id < rhs.claim_id &&
lhs.ndc_code < rhs.ndc_code);
};
内联布尔运算符您没有正确实现比较。您应该只比较第一个不同的字段:
if (lhs.alert_uuid != rhs.alert_uuid)
return lhs.alert_uuid < rhs.alert_uuid;
else if (lhs.ndc_code != rhs.ndc_code)
return lhs.ndc_code < rhs.ndc_code;
else if ( /* etc ... */ )
您没有正确执行比较。您应该只比较第一个不同的字段:
if (lhs.alert_uuid != rhs.alert_uuid)
return lhs.alert_uuid < rhs.alert_uuid;
else if (lhs.ndc_code != rhs.ndc_code)
return lhs.ndc_code < rhs.ndc_code;
else if ( /* etc ... */ )
您的比较器不正确。将a
和b
与您的定义同时使用是可行的。这打破了要求严格弱排序的std::set
确定性算法。您在问题最后提出的建议是解决此问题的一种方法(还有一些严格使用运算符的人您的比较器不正确。将a
和b
与您的定义同时使用是可行的。这打破了要求严格弱排序的std::set
确定性算法。您在问题末尾的建议是解决问题的一种方法这(还有其他严格使用运算符的
inline bool operator<(const drugKey_tp &lhs,
const drugKey_tp &rhs) {
return (lhs.alert_uuid < rhs.alert_uuid &&
lhs.ndc_code < rhs.ndc_code &&
lhs.claim_id < rhs.claim_id &&
lhs.ndc_code < rhs.ndc_code);
};
inline bool operator<(const drugKey_tp &lhs,
const drugKey_tp &rhs) {
if (lhs.alert_uuid != rhs.alert_uuid)
{
return lhs.alert_uuid < rhs.aler_uuid;
}
if (lhs.ndc_code != rhs.ndc_code)
{
return lhs.ndc_code < rhs.ndc_code;
}
... and so on ...
};
if (lhs.alert_uuid != rhs.alert_uuid)
return lhs.alert_uuid < rhs.alert_uuid;
else if (lhs.ndc_code != rhs.ndc_code)
return lhs.ndc_code < rhs.ndc_code;
else if ( /* etc ... */ )
#include <tuple>
return
std::tie(lhs.alert_uuid, lhs.ndc_code, lhs.claim_id, lhs.patient_id) <
std::tie(rhs.alert_uuid, rhs.ndc_code, rhs.claim_id, rhs.patient_id);