创建一组类
Creating a set of classes
我正在尝试创建一个可以用类实例填充的集合。我认为集合的一个要求是元素可以进行比较,因此在这种情况下,我需要告诉我的类如何进行比较。我创建了以下类:
class Myclass
{
public:
Myclass(int i):storedval(i) {}
int getval(){return storedval;}
friend bool operator> (Myclass &first, Myclass &second)
{
return first.getval()>second.getval();
}
friend bool operator< (Myclass &first, Myclass &second)
{
return first.getval()<second.getval();
}
private:
int storedval;
};
但是当我尝试将实例添加到这样的集合中时:
Myclass a(50);
set<Myclass> Bunchofclasses;
Bunchofclasses.insert(a);
它给了我一堆错误文本,我想告诉我它不理解>和<操作员。应该如何正确地做到这一点?
您需要将const
引用传递给比较函数,因为不应该允许它修改要比较的项:
friend bool operator< (const Myclass& first, const Myclass& second)
{ // ^^^^^ ^^^^^
return first.getval() < second.getval();
}
这将要求您也制作getVal()
const
。这使得它可以在const
实例上或通过const
引用调用:
int getval() const {return storedval;}
// ^^^^^
请注意,该集不需要operator>
即可工作。不足即足矣。
严格来说,这里不需要friend
函数,因为您调用的是public
成员函数。friend
在这里带来的唯一功能是允许您在类定义内部声明一个非成员函数。
集合的元素是不可变的,因此集合需要能够比较const
值。因此,需要进行比较:
friend bool operator< (Myclass const &first, Myclass const &second)
// ^^^^^ ^^^^^
(您可能还应该使用operator>
和您提供的任何其他非变异操作来执行此操作;但set
只需要operator<
)。
此外,为了访问const
对象的值,访问者还需要是const
:
int getval() const
// ^^^^^
相关文章:
- 如何从一组具有从左到右优先级的整数值创建有序整数键?
- 如何快速创建一组覆盖两个图像的图像
- 如何从一组派生类创建列表?
- 创建一组向量
- 在C 中,是为派生类创建的一组新的私人变量
- 从向量<T>创建一组字符串
- 是否可以为CPP中的对象创建一组指针
- 在C 中创建一组对象
- 如何创建一组UI元素,您可以迭代
- 正在读取由另一组代码c++创建的二进制文件
- 如何创建一组std::结构
- 如何在c++中使用两个排序标准(对于一组对)创建有序集
- C++:为什么创建的向量没有传递到下一组 for 循环
- Boost:创建一组线程并等待所有线程的正确习惯用法是什么
- 创建一组对象
- 矢量化方式,从R中的一组观测值创建频率矢量
- 如何创建一组 deques
- 创建一组随机连接的节点
- 创建一组类
- c++纸牌游戏,当新一轮牌组创建/新一轮开始时,手牌被发不止一次