정렬 된 순서로 진행해야하는 많은 개체가 있습니다. SplHeap, SplMaxHeap 및 SplMinHeap의 두 하위 클래스가 발견되었으므로 실험으로 사용할 수 있다고 생각했습니다. 의견에서 나는 또한 SplPriorityQueuementioned를 읽었다.SplHeap, SplMinHeap, SplMaxHeap 및 SplPriorityQueue의 차이점
그러나 이들을 테스트 한 후에는 세 개의 힙 간의 차이점과 힙과 큐를 선택하는 방법에 대해 확신 할 수 없습니다.
class SortedObjectHeap extends SplHeap|SplMinHeap|SplMaxHeap
{
protected $_property;
public function __construct(string $property)
{
$this->_property = $property;
}
protected function compare($x, $y)
{
$x = $x->{$this->_property} ?? null;
$y = $y->{$this->_property} ?? null;
return strnatcasecmp($x, $y) * -1;
}
}
$list = new SortedObjectHeap('name');
$list->insert($object);
// ...
class SortedObjectQueue extends SplPriorityQueue
{
public function compare($x, $y)
{
return strnatcasecmp($x, $y) * -1;
}
}
$list = new SortedObjectQueue();
$list->insert($object, $object->name);
// ...
질문 :
을 여기 는foreach
루프 개체를 나열합니다 즉, 제대로 순서를 분류에 모두가 처음부터 마지막으로, 이름으로 개체를 정렬 것, "4"클래스입니다 순서가 정확히 동일하게 보이는
SortedObjectHeap
를 들어
는 상관없이 나는
SplHeap
,SplMaxHeap
또는SplMinHeap
확장 여부를 지정합니다. Min과 Max 사이를 전환 할 때 순서가 뒤바뀐다고 생각했지만 그렇게되지는 않을 것입니다 ... 그래서이 3 가지 클래스를 확장하는 것의 차이점은 무엇입니까? 워드 프로세서- ,
SplHeap
및SplPriorityQueue
간에 명백한 차이는 큐가insert
방법 여분$priority
매개 변수를 사용한다는 것이다. 그래서, 그것은 큐 내부에서 힙을 가지고 "내부적으로"알고있는 동안, 각 인서트에서 어떤 것을 정렬해야하는지 알려주는 것처럼 보입니다. 차이점이 있습니까? 아니면이 둘 사이에 다른 중요한 차이점이 있습니까? 나는 그들이 내부적으로 다르게 작동한다고 가정하니? 어떻게이 두 가지를 선택합니까?
자연스러운 순서를 사용할 수 있다면'SplMinHeap' /'SplMaxHeap'을 사용 하겠지만,'compare' 메서드를 오버라이드하면'SplHeap'을 확장 할 수 있을까요? 그리고 예, "정렬 된 문자열 목록"은 단순화 된 것보다 약간 단순한 것입니다 ...실제로는 반 무작위로 "수집"한 다음 특정 순서로 처리해야하는 객체입니다. 나는 * 먼저 * 수집하여 일종의 일을 할 수 있었지만 호기심에 기반을 두는 2 단계로 할 필요가없는 방법을 찾고있었습니다. – Svish
@Svish : 예. 'compare'를 오버라이드하려면'SplHeap'을 사용해야합니다. –