Php 在给定中断规则的情况下定义最大堆优先级队列的优先级

Php 在给定中断规则的情况下定义最大堆优先级队列的优先级,php,algorithm,data-structures,priority-queue,max-heap,Php,Algorithm,Data Structures,Priority Queue,Max Heap,我有以下属性的数据:名称、单价、数量、时间戳。e、 g [Alice, 40.0, 20, 1000000000] [Ben, 30.0, 35, 1000000001] [Chris, 50.0, 25, 1000000002] [Dolly, 20.0, 50, 1000000002] [Erin, 20.0, 50, 1000000003] [Fred, 30.0, 20, 1000000004] [Gabby, 30.0, 20, 1000000005] [Harold, 30.0, 2

我有以下属性的数据:
名称、单价、数量、时间戳
。e、 g

[Alice, 40.0, 20, 1000000000]
[Ben, 30.0, 35, 1000000001]
[Chris, 50.0, 25, 1000000002]
[Dolly, 20.0, 50, 1000000002]
[Erin, 20.0, 50, 1000000003]
[Fred, 30.0, 20, 1000000004]
[Gabby, 30.0, 20, 1000000005]
[Harold, 30.0, 20, 1000000005]
我正在尝试将数据存储在最大堆优先级队列中,其中优先级由以下中断规则定义:

  • 最高单价优先考虑
  • 如果单位价格有关联,最高数量优先
  • 如果单价和数量有关联,则时间戳优先
  • 如果仍然存在平局,则按名称的字母顺序分配优先级
请注意,名称不是唯一的属性,但与时间戳组合的名称是唯一的,例如Ben可能在不同的时间有两个条目。此外,数据并非全部同时接收,因此插入优先级队列的成本需要保持低廉,优先级将继续更新。在一天结束时,项目最终会按优先级顺序从队列中移除

我不知道如何根据打破平局的规则来定义优先级。e、 g.在上面的例子中,Chris根据最高单价拥有最大优先级,然后是Alice,然后是Ben,然后是Fred(基于数量),然后是Gabby和Harold,按字母顺序排列(时间戳相等,但在Fred之后),最后是Dolly,然后是Erin(基于时间戳优先级)

我在PHP中工作,但我也能理解C++代码。下面是PHP中最大堆优先级队列的示例,其中优先级只是一个数字。根据我的数据,有没有关于如何打破僵局的建议

PHP代码

<?php
$pq = new SplPriorityQueue;
 
$pq->insert('Ben', 6);
$pq->insert('Fred', 5);
$pq->insert('Harold', 3);
$pq->insert('Dolly', 2);
$pq->insert('Gabby', 4);
$pq->insert('Erin', 1);
$pq->insert('Chris', 8);
$pq->insert('Alice', 7);
 
// This line causes extract() to return both the data and priority (in an associative array),
$pq->setExtractFlags(SplPriorityQueue::EXTR_BOTH); // Otherwise it would just return the data
 
while (!$pq->isEmpty()) {
    print_r($pq->extract());
}
?>


您如何接收这些数据?如果通过SQL:是否已研究通过查询对其进行排序?@DefinitelynotRafal谢谢。数据在网页上一个接一个地接收,我可以先将其存储在数据库中。这样,我可以使用查询对其进行排序,但这意味着在收到每个条目后进行排序(以获得优先级),在我最终可以将项目存储在priorityQueue之前?您声明在一天结束时它们会从优先级队列中取出-您可以收集它们并仅定期将它们以更新的顺序/优先级存储在队列中吗?根据我的了解,您可以创建一个对象/数组并进行自定义比较(您将其描述为您的打破领带规则)你可以让它变得更复杂。检查这个例子:@Cogicero you's welcome。实际上,我不会将我的评论作为答案转发,其他人可以将其作为有效答案。因为我的评论只解决了你的部分问题,而不是整个问题。我的评论提供了一个示例,但不是你具体问题的答案问题。