我在 Qt creator 中编写了以下代码。我试图对包含混合类型的 vector 进行排序,其中包含 2 个 QString 和一个整数。我使用 std::sort 及其函数机制进行排序。至少在输出排序前和排序后,排序似乎是有效的,但我的问题是,准确和安全吗?
谢谢。
#include <vector>
#include <algorithm>
#include <QDebug>
class mixed
{
public:
int number;
QString name;
QString address;
mixed(int n, QString s, QString a)
{
number = n;
name = s;
address = a;
}
};
bool myfunction (mixed i,mixed j) { return (i.number<j.number); }
int main()
{
std::vector<mixed>myV;
myV.push_back(mixed(100, "akkas", "100"));
myV.push_back(mixed(2, "akkas1", "2"));
myV.push_back(mixed(1111, "akkas2", "1111"));
myV.push_back(mixed(-1, "akkas3", "-1"));
myV.push_back(mixed(7, "akkas4", "7"));
myV.push_back(mixed(0, "akkas0", "0"));
for(int i=0; i<myV.size(); i++)
{
qDebug()<<myV.at(i).number<<" "<<myV.at(i).name<<" "<<myV.at(i).address<<endl;
}
std::sort (myV.begin(), myV.end(), myfunction);
for(int i=0; i<myV.size(); i++)
{
qDebug()<<myV.at(i).number<<" "<<myV.at(i).name<<" "<<myV.at(i).address<<endl;
}
return 0;
}
最佳答案
std::sort
可以对任何类型的元素进行排序,只要它们是可复制的或可移动的。提供的比较函数必须引入严格弱排序。您的比较函数是有效的严格弱排序,它将所有具有相同number
的对象集中到一个等价类中。如果未排序的 vector 包含具有相同 number
值的记录,它们将在已排序的 vector 中相邻,但顺序未指定。
关于c++ - 使用 std::sort 根据数据类型中包含的整数值对混合数据类型 vector 进行排序有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36610653/