Я написал следующий код в Qt Creator. Я пытался отсортировать вектор, который содержит смешанный тип с 2 QStrings и целым числом. Я использовал 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
в единый класс эквивалентности. Если несортированный вектор содержит записи с равными number
значения, они будут смежными в отсортированном векторе, но порядок не указан.
Других решений пока нет …