2013-10-02 29 views
0

的矢量我有下面的代码片段:的std ::排序()不工作对

struct compare { 
    bool operator()(const pair<size_t, double>& left, const pair<size_t, double>& right) { 
       return left.second > right.second; 
    } 
}; 

int main() { 
    size_t vertices = 31112738; 
    vector<pair<size_t, double> > opt, one; 
    opt.reserve(vertices); 
    one.reserve(vertices); 

    for(size_t i=0;i<vertices;i++) { 
     opt[i] = make_pair(i,rand()); 
     one[i] = make_pair(i,rand()); 
    } 

    sort(opt.begin(), opt.end(), compare()); 
    sort(one.begin(), one.end(), compare()); 

    return 0; 


} 

即使调用排序功能后,选择[]和[]不排序。但是,如果我使用push_back()来插入元素,然后调用sort()函数,它们将被排序。

为什么两种情况下的结果不同?

+2

'reserve'更改容量,而不是大小。 –

+0

它编译.. – user1715122

+0

哦,对不起,错字... – user1715122

回答

2

因为在场景中您介绍了,向量总是有大小为0

储备多在载体空间,但你永远不调整他们。 (所以你的for循环通过写入向量的末尾触发未定义的行为)

push_back将向量的大小增加1,但如果你不调用它,那么你必须调用resize并明确地设置大小。 (或将大小指定为构造函数参数)

+0

我不明白。所以在保留空间之后,我如何访问它?所以我不能在随机位置插入? – user1715122

+0

@ user1715122您可能想了解['resize'](http://en.cppreference.com/w/cpp/container/vector/resize)方法。 –

+0

,因为如果我从索引'0'到'9'打印出opt []或者一个[]的值,它们不是'0'。你是说他们是垃​​圾价值吗? – user1715122