Какой смысл make_heap?

В cocos2d-x v3.x boundingBox устарело в классе Node (то есть суперкласс Sprite ). Вместо этого используйте следующий код:

auto spriteWidth = sprite->getTextureRect().size.width;
auto spriteHeight = sprite->getTextureRect().size.height;

или

auto spriteWidth = sprite->getContentSize().width;
auto spriteHeight = sprite->getContentSize().height;
46
задан 眠りネロク 15 August 2018 в 09:37
поделиться

6 ответов

Если вы хотите создать очередь приоритетов из списка, то вы можете использовать make_heap:

Внутри куча - это дерево, в котором каждый узел ссылается на значения не больше чем его собственная ценность. В кучах сгенерировано по make_heap, конкретная позиция элемент в дереве, а не определяется потреблением памяти ссылок определяется его абсолютным позиция в последовательности, где * первая всегда быть высшей ценностью в куча.

Кучи позволяют добавлять или удалять элементы от него в логарифмическом времени с помощью функции push_heap и pop_heap, которые сохраняют его свойства кучи.

21
ответ дан 26 November 2019 в 20:24
поделиться

You are supposed to use std::make_heap() along with std::push_heap() and std::pop_heap() to maintain a binary heap on top of a vector or array; the latter two functions maintain the heap invariant. You can also use std::heap_sort() to sort such a heap. While it is true that you could use std::priority_queue for a priority queue, it doesn't let you get at the insides of it, which perhaps you want to do. Also, std::make_heap() and std::heap_sort() together make a very simple way of doing heapsort in C++.

8
ответ дан 26 November 2019 в 20:24
поделиться

На ваш прямой вопрос хорошо бы ответил класс алгоритмов и структур данных. Кучи повсеместно используются в алгоритмах информатики. Процитируем приведенную ниже функцию make_heap: «Куча - это дерево, в котором каждый узел ссылается на значения, не превышающие его собственное значение». Хотя существует множество приложений для кучи, то, которое я использую чаще всего, связано с проблемами поиска, когда вы хотите эффективно отслеживать отсортированный список из N значений.

У меня было такое же замешательство, как и у вас, когда я впервые столкнулся с функциями кучи STL. Однако мой вопрос был немного другим. Я задавался вопросом: «Почему куча STL не находится в том же классе структур данных, что и std :: vector?» Я думал, что должно работать так:

std::heap< int > my_heap;
my_heap.heap_insert( 7 );
my_heap.heap_insert( 3 );

Идея, лежащая в основе функций кучи STL, заключается в том, что они позволяют создавать структуру данных кучи из нескольких различных базовых контейнеров STL, включая std :: vector. Это может быть действительно полезно, если вы хотите передать контейнер для использования где-нибудь в ваших программах. Это также немного приятно, потому что вы можете выбрать базовый контейнер своей кучи, если вы решите использовать что-то другое, кроме std :: vector. Все, что вам действительно нужно, это следующее:

template <class RandomAccessIterator>
  void make_heap ( RandomAccessIterator first, RandomAccessIterator last );

Это означает, что вы можете сделать множество разных контейнеров в кучу. Компаратор также является необязательным в сигнатуре метода, вы можете узнать больше о различных вещах, которые вы можете попробовать на страницах STL для функции make_heap.

Ссылки:

43
ответ дан 26 November 2019 в 20:24
поделиться

Существует два основных способа создания [двоичного файла ] heap: создайте пустую кучу и вставьте в нее каждый элемент по одному или возьмите диапазон значений и запишите их в кучу.

Каждая операция отправки в куче занимает время O (logn), поэтому, если вы нажимаете N элементов в кучу это займет O (NlogN) времени.

5
ответ дан 26 November 2019 в 20:24
поделиться

В дополнение к вышесказанному, алгоритм сортировки STL - это introsort , который представляет собой смесь быстрой и динамической сортировки (он переключается с быстрой сортировки на динамическую сортировку, если первое делает плохо). make_heap создает структуру кучи,

4
ответ дан 26 November 2019 в 20:24
поделиться

Они используются для создания и поддержки структуры данных кучи

2
ответ дан 26 November 2019 в 20:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: