C ++重载map []运算符

时间:2015-03-03 10:57:43

标签: c++ templates dictionary overloading brackets

我有2个重载的操作员声明,我需要帮助理解。

template<class KEY, class T>
const T& Map<KEY, T>::operator [](const KEY& key) const { }

template<class KEY, class T>
T& Map<KEY, T>::operator [](const KEY& key) { }

第一个[]用于访问值/返回值,即std::cout<<m["x"]<<std::endl;

第二个[]用于分配,即m["x"] = 1;

我的问题与第二[]有关。如果我要m["z"] = 1010如何存储为与关键z相关联的值?看一下函数声明,我只看到键,而不是值。

我尝试过m_value = T();,但我不确定T()是什么。

谢谢

2 个答案:

答案 0 :(得分:1)

该函数返回一个引用:

template<class KEY, class T>
T& Map<KEY, T>::operator [](const KEY& key) { }
 ^ that means "reference"

这将是对存储在地图中的对象的引用。分配给引用将分配给该对象。

答案 1 :(得分:0)

区别在于const。从理论上讲,你也可以使用第二个输出(也可能是因为它们基本上都是相同参数的相同函数。但这不是你的问题:)

您的第二个“[]”正在执行的操作是让您访问存储在“z”的项目,使用“=”运算符完成分配,您在此处未显示过载。

因此,使用第二个“[]”运算符作为访问方法,使用标准版本的“=”运算符存储10。

希望这有帮助