set和multiset只是谓词不同吗?

时间:2016-12-16 08:31:15

标签: c++ stl

使用以下示例代码:

-d

设置 - 包含唯一值。

Multiset - 可以包含重复值。

但在我的set实现中,我将谓词更改为接受重复值。如果我们只是通过更改谓词来实现这一点,date -d"Fri Dec 16 16:27:28 CST 2016" +%s 1481876854 我相信功能也相同,实现也是相同的(平衡树)。如果我遗失了什么,有人可以详细说明吗?

1 个答案:

答案 0 :(得分:2)

Compare关系必须是 严格 -weak ordered (在这两种情况下)§23.2.4/ 2:

  

每个关联容器都在Key上进行参数化,并且排序关系CompareKey的元素上引入严格的弱排序(25.4)。 [...]

和§25.4/ 4:

  

严格一词指的是反自由关系的要求(!comp(x, x)对所有x),[...]

您的自定义Comparecmp)未达到此要求,因此未定义std::set<int, cmp>的行为。