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

std::sort() not working on vector of pairs

本文关键字:适用于 向量 不适用 sort std      更新时间:2023-10-16

我有以下代码片段:

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;

}

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

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

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

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

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