我试图理解一个类文件以便将自己的书面代码与其集成在一起,但是我在理解此模板函数时遇到了一些困难,因此我无法找出该函数的输出。
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
是什么意思?它真的是递归函数吗?
为什么返回比较表,它的输出是什么?
最佳答案
它不是递归函数。
请允许我在其中复制和添加评论:
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.
}
};
希望这可以帮助