在 C++11 中使用排序函数有什么问题?

What's wrong this use of sort function in C++11?

本文关键字:什么 问题 函数 排序 C++11      更新时间:2023-10-16

我编写了这个程序,用于接收两个向量的输入(考虑到数字可能非常大,普通int无法容纳),然后我希望对它们进行排序。

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
bool myfunct1( A first, A second );
bool myfunct2( A first, A second );
class A
{
    public:
        long long int foo;
};
int main (void)
{
    vector<A> values1(1000);
    vector<A> values2(1000);
    int temp1 = 0;
    int temp2 = 0;
    int faltu;
    while (temp1<n)
    {
        cin>>faltu;
        values1[temp1].foo = faltu;
        temp1++;
    }
    while (temp2<n)
    {
        cin>>faltu;
        values2[temp2].foo = faltu;
        temp2++;
    }
    sort(values1.begin(), values1.end(),&myfunct1);  // Sorting the elements in ascending order
    sort(values2.begin(), values2.end(),&myfunct2);  // Sorting in descending order
    for ( i = 0; i < n; i++ )
        printf("%lld",values1[i].foo);    
    printf("n");
    for ( i = 0; i < n; i++ )
        printf("%lld",values2[i].foo);    
    printf("n");
}

bool myfunct1( A first, A second ) 
{   
    if ( first.foo < second.foo )
        return true;
    else
        return false;
}
bool myfunct2( A first, A second ) 
{   
    if ( first.foo > second.foo )
        return true;
    else
        return false;
}

当我看到排序后的向量输出时,它是不正确的。例如,对于输入为:2 1 3 7 8 9(对于两个向量),它显示输出为,000 987。为什么会发生这种情况?我认为排序函数没有正常工作。但是我在

之后排序

第一个向量打印000的原因可能是因为您用1000个初始值初始化向量,这些初始值可能默认为0。我不是百分之百确定,但第二次排序之所以有效是因为最大的数字被放在前面。在第一个例子中,在1 2 3之前有997个0。我的建议是(如果你的n是3),用3初始化向量,然后做测试。

同样,我想知道为什么你要立即初始化你的向量,让它有1000个A类型的元素,但你也可以试着测试你的程序和排序函数,不初始化任何元素的向量,而是使用push_back方法来插入变量。

您的语法在其他方面是完全正确的,排序应该没有问题。