次のコード スニペットがあります。
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() 関数を呼び出すと、要素が並べ替えられます。
2 つのシナリオで結果が異なるのはなぜですか?