我有型的一千对象MyClass
算法:在数组排序对象基于约束
class MyClass{
array<MyClass> objectsBehind;
Boolean large;
}
哪里objectsBehind
是MyClass
对象和任何对象的数组中的数组是1000的一部分原始对象。
我把它们放在一个数组中并对它们进行排序,使得一个对象出现在数组中比索引号objectsBehind
中的对象更高的索引处。例如,索引为546的对象的排序数组中的索引大于546的数组的objectsBehind
中不能有任何对象。
我的问题是这样的。 1000个物体中约有20个物业拥有物业large = true
。如果不违反objectsBehind
属性,将这些“大”对象按顺序分组到排序数组中是有益的。例如,它会更好,有这样的:
array[45].large = false; array[46].large = true, array[47].large = true, array[48].large = true, array[49].large = false;
比
array[45].large = true; array[46].large = false, array[47].large = true, array[48].large = false, array[49].large = true;
在第一序列中,我有三个大的对象组合在一起,而不是让他们在第二个例子中展开。
我想不出一个好办法做到这一点。有任何想法吗?
我有点困惑。在你的例子中,它看起来像你任意地将索引分配给值来按“大”值分组。如果情况并非如此,你能举一个例子来说明如何根据'large'对有序数据进行分组吗? – Daniel
制作两个集合,其中'large = true'并命令它们,其中'large = false'并命令它们。否则,任何两个'large = true'元素彼此相邻的事实只是第一个排序标准的属性。我想不出一个有意义的方式来包含'large = true'元素,让它们连续,而不是破坏你的第一个标准。 – Shaz
'1000'对许多很多很多平台来说都是如此之小,以至于在任何情况下,有序序列可能都是不相关的。但是标准库为你提供了模板化的容器,你甚至可以使用你自己的谓词并重载一个给定的操作符来保持数据结构在给定字段上的顺序。 – user2485710