Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic “的数据结构”;订单“;列表中对象的属性_Language Agnostic_Design Patterns_Data Structures - Fatal编程技术网

Language agnostic “的数据结构”;订单“;列表中对象的属性

Language agnostic “的数据结构”;订单“;列表中对象的属性,language-agnostic,design-patterns,data-structures,Language Agnostic,Design Patterns,Data Structures,我有一个存储在数据库中的有序对象列表,可以通过ORM(特别是Django的ORM)进行访问。列表是由用户任意排序的,我需要一些方法来跟踪它。为此,每个对象都有一个“order”属性,用于指定其相对于其他对象的顺序 我用于在这个订单字段上排序的任何数据结构都必须根据请求重新创建,因此创建成本必须很低。我将经常使用多个对象之间的比较。插入不能要求我更新数据库中的每一行 我应该使用什么数据结构?链表(双重)?堆 由std::set(c++)实现,并根据值进行比较(取决于存储的值),例如按值的整数、按字

我有一个存储在数据库中的有序对象列表,可以通过ORM(特别是Django的ORM)进行访问。列表是由用户任意排序的,我需要一些方法来跟踪它。为此,每个对象都有一个“order”属性,用于指定其相对于其他对象的顺序

我用于在这个订单字段上排序的任何数据结构都必须根据请求重新创建,因此创建成本必须很低。我将经常使用多个对象之间的比较。插入不能要求我更新数据库中的每一行

我应该使用什么数据结构?

链表(双重)?

std::set
c++
)实现,并根据值进行比较(取决于存储的值),例如按值的整数、按字符串排序的字符串等。适合于排序和访问,但不确定何时需要重新排序,是在插入过程中,不断地等等

您没有指定还有哪些其他约束。若元素的数量已知,并且在内存中保持固定数组是合理的或可能的,那个么每个位置都将由索引指定。假定元素数量固定

您没有指定是否要经常执行操作。
如果您只加载一次值,然后无需修改即可访问它们,那么您可以使用一种算法进行创建,然后构建索引或转换存储以使用快速访问…

我认为您无法获得固定的插入时间(但可能是摊销的固定时间?)


我将使用二叉树,然后描述路径的位序列可以用作您的“顺序属性”。

比较将不是线性的。我可能需要扫描列表的其余部分,以确定a>b。在有序链表中的插入和删除是线性时间,也称为O(N)。有一个N次迭代的上限来查找您要查找的值。呃——或者更确切地说,它们是线性的。输入错误。我不确定这与实现为单链或双链表的优先级队列有什么不同,整数是“顺序”属性。是否存在使您的情况独特的约束?是否需要在数据库中存储排序顺序(每个用户)?是的,每个对象的排序顺序将存储在数据库中(1个对象==数据库中的1行)。谢谢,stefanB。我在帖子中添加了更多信息。对不起,这里还是新的:)