在模板类中定义的类,不了解如何使用它并定义它

时间:2012-12-01 00:01:12

标签: c++ templates hashmap

我已经获得了我需要编码的模板的骨架。我从来没有真正处理模板。关于这个模板的奇怪之处在于它要求我们在模板本身内编写一个类 - 不仅仅是类函数,而是一个全新的类。以下是仅用于模板的代码(我在一些方法中插入了几行代码才开始,它们对我的问题无关紧要):

包括

template<class K, class V> class HMap
{
 private:
 // insert instance variables
 // insert constants (if any)

 public:
 class MapEntry
 {
    private:
        K key;
        V value;

    public:
    /**
     * Creates a MapEntry.
     * 
     * @param akey the key
     * @param avalue the value
     */
    MapEntry(K akey, V avalue)
    {
        key = akey;
        value = avalue;
    }

    /**
     * Returns the key for this entry.
     * 
     * @return the key for this entry
     */
    K getKey()
    {
        return key;
    }

    /**
     * Returns the value for this entry.
     * 
     * @return the value for this entry
     */
    V getValue()
    {
        return value;
    }

    /**
     * Sets the value for this entry.
     * 
     * @param newValue
     * @return the previous value for this entry
     */
    V setValue(V newValue)
    {
        V oldval;
        oldval = value;
        value = newvalue;
        return oldval;
    }
};

当您创建HMap模板类型的对象时,如何在其中使用MapEntry类?我对模板非常陌生,我有点失落,不知道从哪里开始。谢谢。

1 个答案:

答案 0 :(得分:0)

HMap<Int, Double>::MapEntry引用内部类。但是为什么要暴露内部结构?

也许这样做会更容易(我实现对的列表,而不是哈希,因为我很懒)

template <type Key, type Value>
class HashMap {
private:
struct entry { Key key, Value value};
std::list<entry> map;
public:
  HashMap() {};
  void add_element(Key key, Value value)
    {
      entry e = {.key = key, .value = value};
      map.push_back(e);
    };
}