【发布时间】:2019-08-30 07:02:15
【问题描述】:
下面这段代码:
int main()
{
std::set<Node> s;
for (int i = 0; i <= 5; i++)
s.insert(Node(i));
s.insert(Node(4));
for (auto itor = s.begin(); itor != s.end(); itor++)
{
std::cout << itor->val << ' ';
}
}
当符号'
struct Node
{
int val;
Node(int _val = -1) : val(_val) {}
bool operator<(const Node &p) const
{
return val > p.val;
}
};
当我把函数改成这样的时候:
bool operator<(const Node &p) const
{
return val >= p.val;
}
输出变为:'5 4 4 3 2 1 0'。 这种差异让我感到困惑,有人可以解释为什么会发生这种情况并解释“插入”函数的原理吗?
【问题讨论】:
-
insert没有错,但是使用>=打破了“严格弱排序”的前提。 stackoverflow.com/questions/979759/… -
val > p.val不是val >= p.val。对于两个相等的元素,“小于”永远不应返回 true。