Два вопроса об использовании вектора - PullRequest
0 голосов
/ 07 января 2012

Я создал класс «светлячок», похожий на этот:

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());

с перегруженным оператором <следующим образом: </p>

bool operator <(const firefly &rhs) const {return time_flash < rhs.time_flash;} 

Что-то не так в этом?(я думаю, что-то не так, потому что я не могу)

Ответы [ 3 ]

0 голосов
/ 07 января 2012

Извините, но почему вы выбираете векторную сортировку + настроенную, а не набор / отображение с настроенным компаратором?

Обычно мы используем вектор в основном из-за требования произвольного доступа к его элементам через индекс. Если это не так и особенно в вашем случае, вам нужен отсортированный вектор, я бы предложил набор / карту.

0 голосов
/ 07 января 2012

Для второго вопроса вам придется передать перегруженную функцию для сортировки в качестве аргумента

sort (myvector.begin () + 4, myvector.end (), myfunction);

0 голосов
/ 07 января 2012

Я не уверен, с чем у вас проблемы, но если бы вы попытались скомпилировать этот код, вы бы обнаружили, что

friend bool operator <(const firefly&) const;

недопустимо: у вас не может быть спецификатора const для автономной функции. Кроме того, operator< - это бинарный оператор, поэтому он должен принимать два аргумента, оба типа const firefly &.

Вы также можете реализовать operator< как функцию-член, как вы предлагаете, но затем отбросить объявление friend.

Кроме того, в вашем коде нет ничего плохого, за исключением того, что сортировка вектора полностью равных элементов - пустая трата времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...