我正在尝试理解一个类文件,以便将我自己的编写代码与它集成,但是我在理解这个模板函数时遇到了一些困难,而且我无法找出这个函数的输出。
template <typename Key, typename Value> struct PriorityItem {
Key key;
Value value;
PriorityItem() {}
PriorityItem(Key const& key, Value const& value) : key(key), value(value) {
}
bool operator<(PriorityItem const& pi) const {
if (key == pi.key)
return value < pi.value;
return key < pi.key;
}
};
我可以理解这个模板有两个输入并初始化它们。然后,如果我没有弄错,它会变成某种递归函数,但pi.key
或pi.value
是什么意思?
它真的是一个递归函数吗?
为什么它会返回一个比较表格,这是什么输出?
答案 0 :(得分:4)
这不是一个递归函数....
允许我复制并添加评论内容:
template <typename Key, typename Value>
struct PriorityItem { // This is a struct template, it takes two type parameters Key and Value
Key key; // Key is an attribute of the struct and is of type Key (one of the template parameters)
Value value; // Value is an attribute of the struct and is of type Value (the second template parameter)
PriorityItem() {} // This is the default constructor.
// It relies on Key and Value types to have proper constructors
// in order to initialize the key and value attributes.
PriorityItem(Key const& key, Value const& value) : key(key), value(value) {
// This is parameter constructor. It provides values
// to both attributes and assigns them in the initializer list.
}
bool operator<(PriorityItem const& pi) const {
// This is an operator< method. It allows to do things like :
// PriorityItem<A,B> a;
// PriorityItem<A,B> b;
// ...
// if(a < b) { ... }
//
// the comparison relationship goes as follows:
if (key == pi.key) // If key attribute is the same in both, PriorityItems...
return value < pi.value; // then follow the order of the value attributes.
return key < pi.key; // Otherwise, follow the order of the key attributes.
}
};
希望这有帮助
答案 1 :(得分:1)
这个类的任何内容都不是递归的。 PriorityItem(Key const& key, Value const& value)
构造函数只是使用与参数传入的相同值初始化成员变量。这就是key(key)
和value(value)
所代表的含义。这些是具有相同名称的memeber变量的构造函数。
答案 2 :(得分:1)
键和值是实例化对象的成员变量。 pi.key和pi.value变量是您用来比较实例化变量的对象。该函数的作用是首先比较键,如果键是相同的,它会根据对象的值来比较对象。