2015-12-04 4 views
2

У меня есть элементы в массиве, созданные из этой структуры:из массива приоритетной очереди

struct ks{ 
    int cap; 
    int val; 
}; 

Массива именованных элементов и содержит количественные элементы.

items = new ks[quantity]; 


Я хочу, чтобы поместить их в приоритетной очереди - которые в основном означает сортировку их.
Это моя функция сравнения:

struct itemsCompare{ 
    bool operator() (const ks &item1, const ks &item2){ 
     if (item1.val/item1.cap > item2.val/item2.cap) return true; 
     return false; 
    } 
}; 

Как следует создать из этой очереди выглядит?

priority_queue <ks, What should I put here?, itemsCompare> comparedItems; 
for(int i=0; i<quantity; i++) comparedItems.push(items[i]); 

Я знаю, что для этого шаблона требуется вектор в качестве контейнера. Как мне изменить код, чтобы он работал? Я знаю, что я могу поместить элементы в вектор непосредственно перед объявлением очереди приоритетов, но мне любопытно, есть ли способ сделать это только с массивом.

+2

Put 'зЬй :: вектор ' там. –

+0

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

+2

И заставить оператор вызова функции перегружать 'const'. –

ответ

1

Отвечая на вопрос, как спросил:

std::priority_queue <ks, std::vector<ks>, itemsCompare> comparedItems; 

Однако вопрос имеет некоторые вопросы, непосредственно не спросил. Во-первых, это спортивное подразделение на неконтролируемые вещества :). Что произойдет, если вы разделите на 0?

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

+0

После создания кода я получаю некоторые странные ошибки, такие как «неопределенная ссылка», и есть моя функция сравнения. Что-то не так с этим сравнением. – DzikiChrzan

+1

Отправьте здесь всю ошибку. – SergeyA

+0

**/usr/include/C++/5.1.1/bits/predefined_ops.h: 144: ошибка: неопределенная ссылка на 'branchandbound :: itemsCompare :: operator() (branchandbound :: ks const &, branchandbound :: ks const &) '** - branchandbound - мой класс – DzikiChrzan

1

Чтобы создать std::priorty_queue из массива можно использовать

std::priority_queue <ks, std::vector<ks>, itemsCompare> comparedItems(items, items + quantity); 
Смежные вопросы