std :: sort()不适用于对的向量

时间:2013-10-02 07:01:24

标签: c++ sorting vector push-back

我有以下代码段:

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;


}

即使在调用sort函数之后,opt []和one []也没有排序。但是,如果我使用push_back()插入元素然后调用sort()函数,它们将被排序。

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

1 个答案:

答案 0 :(得分:2)

因为在您概述的场景中,向量的大小始终为0。

保留向量中的更多空间,但您永远不会调整它们。 (所以你的for循环只是通过写过向量的末尾来触发未定义的行为)

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