我正在创建一个KeyValuePair类,并且在重载关系运算符时遇到了一些麻烦。我的理解是这对于使用std排序函数是必要的(我试图根据值进行排序)
以下是标题:
template <typename K, typename V>
class KeyValuePair
{
public:
//factory
static KeyValuePair<K,V>* newKeyValuePair(K key, V value);
//getters
const K &Key() const;
const V &Value() const;
//setter
V &Value();
//The problem
bool operator<(const KeyValuePair<K,V> &rhs);
string toString();
~KeyValuePair(void);
private:
K key;
V value;
KeyValuePair(K key, V value);
KeyValuePair(void);
};
这是&lt;的定义。功能
template <typename K, typename V>
bool KeyValuePair<K,V>::operator<(const KeyValuePair<K,V> &rhs)
{
return value < rhs.Value();
}
以下是我只测试该类功能的主要内容。
int _tmain(int argc, _TCHAR* argv[])
{
KeyValuePair<char,int>* kvp1 = KeyValuePair<char, int>::newKeyValuePair('A',1);
KeyValuePair<char,int>* kvp2 = KeyValuePair<char,int>::newKeyValuePair('B',10);
cout << (kvp1 < kvp2) << "\n";
return 0;
}
我在&lt;的断点处。在我的KeyValuePair类中运行,它永远不会被激活。
任何想法?提前致谢。
答案 0 :(得分:5)
kvp1
和kvp2
是指向KeyValuePair<char, int>
个对象的指针。它们本身不是KeyValuePair<char, int>
个对象。
*kvp1 < *kvp2
会调用您重载的operator<
。您不能为两个指针类型重载operator<
,因为将使用指针的内置operator<
。
std::pair
可用作键值对。在任何情况下,您几乎肯定不应该动态创建此类型的对象:您应该尽可能避免动态分配,尤其是显式动态分配。相反,只需使用KeyValuePair<char, int>
局部变量:
KeyValuePair<char, int> kvp1('A', 1);
KeyValuePair<char, int> kvp2('B', 10);
std::cout << (kvp1 < kvp2) << "\n"; // calls your operator< overload