sort函数在c ++中给出了意想不到的结果

时间:2014-11-09 09:47:29

标签: c++ sorting

我的结构数据为:

typedef struct 
{
    int num,index;
} data;

和我的排序功能:

bool comp(const data &i , const data &j)
{
    return (i.num < j.num);
}

这是我的主要功能:

int t,n,p,tcase,i,j;
vector<data> a;
vector<int > b ;

cin >> n;

a.resize(n);
b.resize(n);

j=0;

for(i=0 ; i<2*n ; i++)
{
    if(i%2)
    {
        b.emplace_back();
        cin >> b[j];
        j++;
    }
    else
    {
        a.emplace_back();
        cin >> a[j].num;
        a[j].index = j;
    }
}

for(i=0 ; i<n ; i++)
{
    cout << a[i].num << endl;
}

cout << endl;

sort(a.begin() , a.end() , comp);

for(i=0 ; i<n ; i++)
{

    cout << a[i].num << endl;
}

a.erase(a.begin() , a.end());
b.erase(b.begin() , b.end());       
tcase++;

所以当我使用以下输入运行我的程序时:

4 15 25 30 35 45 50 10 20

那么我的预期答案应该是:

10 15 30 45

但我的计划是:

0 0 0 0

我在哪里做错了?

2 个答案:

答案 0 :(得分:0)

只是评论这些行。

a.emplace_back();

b.emplace_back();

你很高兴。

是的,emplace_back将新元素追加到容器的末尾。而你在这里不需要它。 链接:http://ideone.com/o92WE6

答案 1 :(得分:-1)

您可以将比较函数声明为类和过载()运算符,以便于实现

class Compare
    {
    public:
    bool operator()(f_coord a,f_coord b)
    {
        return(a.val>b.val);
    }
    };