最多获取2个对象
Get max of 2 objects
我对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;
}
相关文章:
- 如何返回一个类的两个对象相加的结果
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 从多个源构造一个对象,包括一个对象向量
- 如何在C++中从文件中读取/写入多个对象
- 最多获取2个对象
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 无法使用VAO和EBO(openGL)绘制多个对象
- 如何返回多个矢量对象的平均值?C++
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 如何在生成文件中添加多个标头 (HDR) 和对象?
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 如何用 2 个对象过度引导运算符
- 在 c++ 中,如何返回多个对象并从 RVO 中受益
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 跨多个对象使用地图