c++ - 使用 std::sort 根据数据类型中包含的整数值对混合数据类型 vector 进行排序有多安全?

标签 c++ qt sorting c++11 mixed

我在 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/

相关文章:

c# - 在 C# 中使用 C++ 函数

c++ - 控制台应用程序中的 QShortcut(无 GUI)

java - 为什么程序的执行时间会发生显着变化?

c - 无法调试我的快速排序程序

python - 列上的十分位数 Pandas DataFrame

c++ - 在 C++ 中制作一个大的二维数组

c++ - 试图跳出这个循环

c++ - `const` 到非 `const` 或非 `const` 到 `const`

c++ - Qt Creator 调试器中 vector 成员的值是多少?

python - 为什么 IPython QtConsole 没有启动?