最多获取2个对象

Get max of 2 objects

本文关键字:对象 2个 获取      更新时间:2023-10-16

我对C++很陌生。有没有一种方法可以比较同一类的两个对象并返回较大的对象?

这是一些伪代码来说明的想法

HashMap biggerObject = std::max( obj1, obj2,
[]( HashMap &a, HashMap &b )
{
return a.size() < b.size();
} );

我怎么能以某种方式编写HashMap,让它知道如何比较自己呢?

只需使用:

HashMap biggerObject = std::max(obj1, obj2,
[](const HashMap &a, const HashMap &b) {
return a.size() < b.size();
});

您也可以重载自己的class的运算符:下面是一个简单的示例:

#include<iostream>
struct HashMap {
int value = 10;
std::string whatever;
bool operator<(const HashMap &rhs) const {
// your logics..
return value < rhs.value;
}
};
int main() {
HashMap map1, map2;
map1.value = 100;
map2.value = 10;
const auto &val = std::max(map1, map2);
std::cout << val.value << std::endl;
}

问题是,虽然在您自己的HashMap实现中添加operator<方法很容易,但对于HashMap容器来说,这是唯一的小于的含义吗?如果没有,那么它将在未来引起混乱。小于也可能意味着的子集?

编写一个依赖于类的泛型函数可能会更好,该类具有与之比较的size((成员,或者甚至只是一个简单的函数,它接受两个HashMap对象:

template <class Container>
Container& FewestMembers(Container& lhs, Container& rhs)
{
if (lhs.size() < rhs.size())
return lhs;
else
return rhs;
}
template <class Container>
Container& MostMembers(Container& lhs, Container& rhs)
{
if (lhs.size() > rhs.size())
return lhs;
else
return rhs;
}