Я хочу создать собственный контейнер данных, например STL-containers
.Как использовать компаратор по умолчанию в своем классе?
template <class priorityType = size_t, class Compare = std::less<priorityType>>
class task_queue
{
public:
task_queue(Compare c = Compare())
{
}
private:
std::priority_queue<priorityType, std::vector<priorityType>, Compare> tasks_id;
};
int main() {
struct foo
{
int a;
};
struct foo_compare
{
bool operator()(const foo& lhs, const foo& rhs) const {
return lhs.a < rhs.a;
}
};
task_queue<foo, foo_compare> queue{ foo_compare() };
}
Я хочу использовать comparator
, который передается в конструктор, в tasks_id
PQ. Как я могу это сделать?
Если вы передадите оператор сравнения в конструкторе, вы не получите привязку сравнений времени компиляции, т. Е. Ваш код будет менее эффективным. –
@ ErikAlapää, но контейнеры STL используют этот материал таким образом. – Denis
В общем, хороший код на C++, включая STL, пытается использовать привязку времени компиляции, когда это возможно. Это одна из причин, почему std :: sort в C++ быстрее, чем C quicksort. (Сорт C++ использует сопоставления по времени компиляции, в то время как обычная C quicksort использует указатели на функции). –