0

我有以下代码片段:

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() 函数,它们就会被排序。

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

4

1 回答 1

2

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

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

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

于 2013-10-02T07:06:14.267 回答