关于矢量使用的两个问题

时间:2012-01-07 14:27:13

标签: c++ sorting vector

我创建了一个类似于“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;} 

这样做有什么不对吗? (我认为有些不对劲,因为我不能)

3 个答案:

答案 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);