我一直在研究压缩算法的一些c ++代码。但是被困在这条线上:
priority_queue<Node*, vector<Node*>, comp> pq;
Node和comp是结构。 你能告诉我这条线的含义吗?
答案 0 :(得分:2)
语法称为template,它在C ++中经常使用,所以你应该花点时间研究它。
对于某些类型T
,大小为10的C样式数组定义为:
T arr[10];
所以
int arr[10]; // Array holding 10 int
float arr[10]; // Array holding 10 float
struct X arr[10]; // Array holding struct X
首先给出元素的类型,它是一个数组的事实来自变量名后面的[10]
。
C ++中的容器使用模板语法。例如std::vector
:
std::vector<int> vec; // Is a vector holding int
std::vector<float> vec; // Is a vector holding float
你的例子有点复杂,因为在std::priority_queue
中,你指定它应该持有的元素的类型,它用于保存元素的容器类型,以及用于对元素进行排序的比较器容器。
priority_queue<Node*, vector<Node*>, comp> pq;
^^^^^ ^^^^^^^^^^^^^ ^^^^
Type Container Compare
如果你这样做了
priority_queue<Node*, deque<Node*>, comp> pq;
您仍会获得std::priority_queue
,但内部会使用std::deque
代替std::vector
。
BTW:请注意,模板不仅适用于标准容器。您可以编写自己的使用模板的类和函数。