将优先级队列传递给函数时比较器的模板参数
Template arguement for comparator when passing priority queue to a function
我是 C++ 的新手,仍在学习这些概念。我正在尝试将带有自定义比较器的优先级队列传递给模板化函数。当我将比较器类型传递给函数定义中的函数时,我想抽象优先级队列模板参数列表中的比较器类型。下面是我正在尝试做的一个例子。
File1.h
struct my_comparator
{
bool operator()(const some_type* c1, const some_type* c2){
c1->property < c2->property;
}
another_funtion(….)
{
std::priority_queue<const some_type*, std::vector<const some_type*>, my_comparator> my_queue;
some_function(my_queue);
}
File2.h
some_function(std::priority_queue<const some_type*, std::vector<const some_type*>, comparator_type> queue_)
{
//implementation
}
我想了解在 some_function 定义的优先级队列模板中作为比较器类型传递的内容,以便它可以接受我在文件中定义的任何自定义比较器(遵循所需格式)即调用函数(在本例中为 File1.h)。
P.S: 这是我第一次在这里发帖。提前为任何格式道歉 mistakes.Thank 你!
你可以一路走来让 some_function
泛化以接受任何类型:
template <typename P>
void some_function(P queue_)
{
//implementation
}
(另请参阅此处的示例:https://en.cppreference.com/w/cpp/container/priority_queue)或使用别名
using priority_queue_type = std::priority_queue<const some_type*, std::vector<const some_type*>;
并在 headers.
中提供
您似乎希望允许使用任何比较器(在您的自定义类型 some_type 上)。为此,您可以简单地使用(我假设您确实想要按值传递):
template<class TComparator>
void some_function(std::priority_queue<const some_type*, std::vector<const some_type*>, TComparator> queue)
{
// ...
}
然后,让编译器推导出你的论点。假设你有两个比较器 my_comp1 和 my_comp2,那么你可以有:
template<class TComparator>
using my_queue_t = std::priority_queue<const some_type*, std::vector<const some_type*>, TComparator>;
my_queue_t<my_comp1> q1;
my_queue_t<my_comp2> q2;
// Do something with them
some_function(q1);
some_function(q2);
比较器类型将由编译器自动推断。您还可以将模板别名分隔到另一个文件(例如靠近您的类型 some_type)并在两个文件中使用。
我是 C++ 的新手,仍在学习这些概念。我正在尝试将带有自定义比较器的优先级队列传递给模板化函数。当我将比较器类型传递给函数定义中的函数时,我想抽象优先级队列模板参数列表中的比较器类型。下面是我正在尝试做的一个例子。
File1.h
struct my_comparator
{
bool operator()(const some_type* c1, const some_type* c2){
c1->property < c2->property;
}
another_funtion(….)
{
std::priority_queue<const some_type*, std::vector<const some_type*>, my_comparator> my_queue;
some_function(my_queue);
}
File2.h
some_function(std::priority_queue<const some_type*, std::vector<const some_type*>, comparator_type> queue_)
{
//implementation
}
我想了解在 some_function 定义的优先级队列模板中作为比较器类型传递的内容,以便它可以接受我在文件中定义的任何自定义比较器(遵循所需格式)即调用函数(在本例中为 File1.h)。
P.S: 这是我第一次在这里发帖。提前为任何格式道歉 mistakes.Thank 你!
你可以一路走来让 some_function
泛化以接受任何类型:
template <typename P>
void some_function(P queue_)
{
//implementation
}
(另请参阅此处的示例:https://en.cppreference.com/w/cpp/container/priority_queue)或使用别名
using priority_queue_type = std::priority_queue<const some_type*, std::vector<const some_type*>;
并在 headers.
中提供您似乎希望允许使用任何比较器(在您的自定义类型 some_type 上)。为此,您可以简单地使用(我假设您确实想要按值传递):
template<class TComparator>
void some_function(std::priority_queue<const some_type*, std::vector<const some_type*>, TComparator> queue)
{
// ...
}
然后,让编译器推导出你的论点。假设你有两个比较器 my_comp1 和 my_comp2,那么你可以有:
template<class TComparator>
using my_queue_t = std::priority_queue<const some_type*, std::vector<const some_type*>, TComparator>;
my_queue_t<my_comp1> q1;
my_queue_t<my_comp2> q2;
// Do something with them
some_function(q1);
some_function(q2);
比较器类型将由编译器自动推断。您还可以将模板别名分隔到另一个文件(例如靠近您的类型 some_type)并在两个文件中使用。