我有以下问题:考虑这个(简化的)结构:
struct Task {
int priority;
std::string description;
// Some other fields
};
现在我想要一组所有的任务并用它做一些工作。因此我有一个相等运算符,它检查每个元素是否相等。
bool isEqual(const Task& lhs, const Task& rhs) {
return lhs.priority == rhs.priority &&
lhs.description == rhs.description &&
// Some other fields
;
}
为此,我使用了 std::unordered_set,效果很好。
但是现在我希望这些任务按它们在集合中的优先级(以获得最高优先级的任务)进行排序。显然,这对于 std::unordered_set 是不可能的,所以我尝试了一个带有以下 less 运算符的 std::set:
bool lessTask(const Task& lhs, const Task& rhs) {
return lhs.priority < rhs.priority;
}
但这意味着通过严格的弱排序,当优先级相等时,两个任务是相等的,这是我不想要的(我想维护我的 isEqual 方法进行相等性检查)。
完成一组任务的最佳方法是什么,我可以非常快速地插入元素并且没有重复条目(由我的 isEqual 函数定义),但能够非常快速地检索具有最高优先级的任务?
我没有绑定到任何特定的 STL 容器,但不想使用任何第三方库(甚至没有提升)。