使用 std::sort 根据数据类型中包含的整数值对混合数据类型向量进行排序有多安全?
How safe it is to sort a mixed datatype vector based on the integer value included in datatype using std::sort?
我在Qt creator中写了如下代码。我试图对包含混合类型的向量进行排序,其中包含 2 个 QString 和一个整数。我使用了std::sort及其函数机制来排序。至少在输出预排序和post-排序中,似乎排序有效,但我的问题是,准确和安全吗?
谢谢。
#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
的对象集中到一个单一的等价class.如果未排序向量包含具有相等 number
值的记录,它们将在排序向量中相邻,但顺序未指定。
我在Qt creator中写了如下代码。我试图对包含混合类型的向量进行排序,其中包含 2 个 QString 和一个整数。我使用了std::sort及其函数机制来排序。至少在输出预排序和post-排序中,似乎排序有效,但我的问题是,准确和安全吗?
谢谢。
#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
的对象集中到一个单一的等价class.如果未排序向量包含具有相等 number
值的记录,它们将在排序向量中相邻,但顺序未指定。