вот проблема:
В моем первом классе у меня есть вектор, двойная переменная, и я перегружаю операторы сравнения.Вот соответствующий код:
class City
{
double distance;
std::vector<int> coordinates;
bool operator<(const City& city) const
{
return this->distance < city.distance;
}
// same for the greater-than operator but changing "<" to ">"
};
В другом классе у меня есть вектор городов, который я должен сортировать каждый раз, когда выполняется условие.Для этого у меня есть структура, определенная следующим образом:
РЕДАКТИРОВАТЬ: (ссылка вместо значения)
struct CitySortHelper {
bool operator() (const City &x, const City &y) const { return x < y; }
} city_sort;
Теперь проблемная часть, когда я сортирую вектор, появляются новые объекты City, и яне могу объяснить, почему:
РЕДАКТИРОВАТЬ:
// this prints all current objects in the vector
for (int i = 0; i < totalCities; i++) {
std::cout << cities->at(i) << std::endl;
}
// after the following line I get new City objects in the
// vector, that weren't there before the sort. The new objects
// always have distance = 0 and random values in the coordinates
std::sort(cities->begin(), cities->end(), city_sort);
// using the sort with no predicate also gives the same faulty results
std::sort(cities->begin(), cities->end());
РЕДАКТИРОВАТЬ: (конструктор копирования и оператор присваивания)
City(const City &city)
{
this->distance = city.distance;
this->coordinates = city.coordinates;
}
City& operator= (const City &city)
{
this->distance = city.distance;
this->coordinates = city.coordinates;
return *this;
}
Странная часть заключается в том, что это происходит толькоесли я сортирую объекты City в порядке возрастания, т. е. если я изменяю оператор сравнения в CitySortHelper
с "<" на ">", то все работает нормально.
Есть идеи, почему это происходит ??Любая помощь приветствуется.