为什么 LINKED_SET 无法比较对象?

Why is LINKED_SET unable to compare objects?

因为我想知道某个对象是否进入 LINKED_SET 以在我的上下文中修剪它,所以我无法将它作为一个对象而不是它的引用进行比较。

changeable_comparison_criterion: BOOLEAN
        -- May `object_comparison' be changed?
        -- (Answer: only if set empty; otherwise insertions might
        -- introduce duplicates, destroying the set property.)
    do
        Result := is_empty
    ensure then
        only_on_empty: Result = is_empty
    end

进入SET class(如上)似乎无法将集合更改为compare_objects。所以我的问题是:

  1. 无法将对象比较成SET
  2. 的语义是什么
  3. 如果我对 LINKED_SET 的选择是错误的,因为误解了它的语义,我应该怎么做才能拥有一个基于对象比较的唯一项目集合,然后能够再次基于对象比较再次修剪项目

比较标准应该在创建容器后立即设置,这样就没有问题了。如果集合中已经有一些对象,如果比较标准发生变化,就不清楚应该对它们做什么。

例如,如果有两个不同的对象 A 和 B 的集合 {A, B},它们具有相同的值,即相等,如果比较标准从 compare_references 改变,应该怎么做到 compare_objects?显然,集合现在应该只有一个对象,因为根据新的设置,它不能容纳两个或更多相同的对象。这是否意味着应该删除对象 A 而应该保留 B?还是应该按相反的顺序进行?您所指的先决条件消除了这种歧义。

解决方案是在容器中没有任何对象之前修改设置:

create my_set.make
my_set.compare_objects