gpt4 book ai didi

c++ - 为什么 std::sort() 会改变排序后的 vector ?

转载 作者:太空狗 更新时间:2023-10-29 20:29:56 26 4
gpt4 key购买 nike

问题是:

在我的第一个类中,我有一个 vector 、一个 double 变量并且我重载了比较运算符。相关代码如下:

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 ">"
};

在另一个类中,我有一个城市 vector ,每次满足条件时我都必须对它进行排序。为此,我有一个结构定义如下:

编辑:(引用而不是值(value))

struct CitySortHelper {
bool operator() (const City &x, const City &y) const { return x < y; }
} city_sort;

现在是问题部分,当我对 vector 进行排序时,新的 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 中的比较运算符从“<”更改为“>”,一切正常。

知道为什么会这样吗??感谢您的帮助。

最佳答案

CitySortHelper 需要通过 const 引用而不是值来获取参数。要记住的另一件事是,排序对 City 使用赋值运算符;检查您的赋值运算符是否正常工作。解决这两个问题应该可以解决问题。

关于c++ - 为什么 std::sort() 会改变排序后的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com