我试图理解一个类文件以便将自己的书面代码与其集成在一起,但是我在理解此模板函数时遇到了一些困难,因此我无法找出该函数的输出。

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.keypi.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.

  }
};


希望这可以帮助

10-04 12:32