首页 > 解决方案 > 添加到 AVL 树的 Int 输入(用于日期)不正确

问题描述

我的问题在 C++ 中。

我有一个经过测试并且工作正常的类 AVL 树和一个 Map 树类。

我创建了一个这样的地图树:

Maptree<string, Mapatree<Date, Maptree<string, int>>> personservice;

然后尝试像这样向地图树添加一个条目:

personservice["Mike"][Date(0, 15, 30, 30)]["Car"]++;

Mike 和 Car 已正确保存在 Maptree 中,但 Date 中的 int 值不正确,大约为 20000+。

这是 Maptree 和 Date 类:

template <class K, class V>
class Maptree
{

public:
    const V &operator[](const K &) const;
    V &operator[](const K &);

private:
    class Entries
    {
    public:
        Entries(const K &c) : key(k), value(v) {}
        K key;
        V value;
        bool operator<(const Entries &e) const { return key < e.key; }
    };
    AVLTree<Entries> entries;
};
class Date{
  public:
    Date();
    bool operator <(const Date& date) const;
    Date(int days, int hours, int minutes, int seconds) {
      days = days;
      hours = hours;
      minutes = minutes;
     seconds = seconds;
    }
  private:
    int days;
    int hours; 
    int minutes;
    int seconds;
    
  friend std::ostream& operator << (std::ostream&, const Date& date);
  friend std::istream& operator >> (std::istream&, Date& date);
};

您知道什么可能导致 Date 中的整数值不正确地保存在 Maptree 中吗?

标签: c++

解决方案


      days = days;
      hours = hours;
      minutes = minutes;
      seconds = seconds;

这四个语句,在构造函数中,将四个构造函数参数的值赋值给自己。换句话说,这绝对没有任何作用。如果你只看这四行 C++ 代码,在任何上下文之外,你必须同意它们除了将四个对象的值分配给它们自己之外,什么都不做。这仍然是什么。

您的明确意图是在构造此类的实例时初始化同名的类成员。您的 C++ 教科书将包含有关正确使用构造函数的初始化部分的更多信息,如下所示:

   Date(int days, int hours, int minutes, int seconds)
       : days{days},
         hours{hours},
         minutes{minutes},
         seconds{seconds}
   {
   }

推荐阅读