我有以下代码段:
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()函数,它们将被排序。
为什么两种情况下的结果不同?
答案 0 :(得分:2)
因为在您概述的场景中,向量的大小始终为0。
您保留向量中的更多空间,但您永远不会调整它们。 (所以你的for循环只是通过写过向量的末尾来触发未定义的行为)
push_back
将向量的大小增加1,但如果不调用它,则必须调用resize
并明确设置大小。 (或指定大小作为构造函数参数)