我创建了一个类似于“firefly”的类:
class firefly{
private:
float time_flash;
public:
firefly(int, int, float, float);//parametric constr.
firefly();
firefly(const firefly& a);//copy constructor
void receive_flash(std :: vector<firefly>&, float, float, int);
friend bool operator <(const firefly&) const;
};
专注于最后两个功能;我有两个关于他们的问题。 在主程序中,我想初始化一个萤火虫矢量,如下所示:
vector <firefly> fire_vec(10, firefly(5, 5,(float) 1., (float)1.) );
使用参数构造函数。我可以这样做吗? 第二个问题。 该向量应按算法排序
排序sort(fire_vec.begin(), fire_vec.end());
重载运算符&lt;如下:
bool operator <(const firefly &rhs) const {return time_flash < rhs.time_flash;}
这样做有什么不对吗? (我认为有些不对劲,因为我不能)
答案 0 :(得分:0)
我不确定你遇到了什么问题,但如果你试图编译这段代码,你就会发现
friend bool operator <(const firefly&) const;
是非法的:您不能在独立功能上拥有const
限定符。此外,operator<
是二元运算符,因此它应该采用两个类型const firefly &
的参数。
您也可以按照自己的建议实现operator<
作为成员函数,但随后删除friend
声明。
除此之外,您的代码没有任何问题,除非排序完全相同元素的向量是浪费时间。
答案 1 :(得分:0)
请问为什么你选择矢量+自定义排序而不是用自定义比较器设置/映射?
通常,我们使用向量主要是因为需要通过索引随机访问其元素。如果情况并非如此,特别是在你的情况下,你需要一个有序的矢量,我建议设置/地图。
答案 2 :(得分:-2)
对于第二个问题,您必须传递重载函数以作为参数排序
sort(myvector.begin()+ 4,myvector.end(),myfunction);