gpt4 book ai didi

c++ - 模板化类中的关系运算符重载 (C++)

转载 作者:行者123 更新时间:2023-11-30 01:30:01 24 4
gpt4 key购买 nike

我正在创建一个 KeyValuePair 类,但在重载关系运算符时遇到了一些麻烦。据我了解,这是使用标准排序函数所必需的(我正在尝试根据值进行排序)

这是标题:

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);
};

这是<函数的定义

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;
}

我在我的 KeyValuePair 类中的 < 函数处有一个断点,它从未被激活。

有什么想法吗?提前致谢。

最佳答案

kvp1kvp2是指向 KeyValuePair<char, int> 的指针对象。他们不是他们自己KeyValuePair<char, int>对象。

*kvp1 < *kvp2会调用你重载的 operator< .你不能重载 operator<对于两种指针类型,因为内置的 operator< for 指针将被使用。

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

关于c++ - 模板化类中的关系运算符重载 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5054149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com