std::sort() 不适用于对向量
std::sort() not working on vector of pairs
我有以下代码片段:
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
并显式设置大小。(或将大小指定为构造函数参数)
相关文章:
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 如何修复我的最大公约数代码?它适用于除零和零以外的所有数字
- 选择排序C++(已修改)并非适用于所有情况
- 无法让"std::enable_if"适用于无作用域枚举
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 确定夏令时是否适用于特定日期
- 是否有一种 STL 算法可以最后找到,但它也适用于指针?
- QT 样式表主题,适用于使用属性选择器的整个应用程序
- C++带有适用于左值和右值的引用参数的函数
- 代码适用于调试,但不适用于发布
- C++17 和更新的 std::分配器是否适用于动态数量的自定义堆?
- 适用于大型数组的无复制线程安全环形缓冲区
- NRVO 是否也适用于协程?
- 使用迭代器成员函数是否仅适用于某些向量类型"empty()"?
- 为运算符编写模板<<适用于任何向量
- 使用向量的merge_sort适用于少于 9 个输入的情况
- c++:应用于向量的STL算法也适用于其他容器对象
- 我可以使用' == '来比较两个向量吗?我试过了,似乎工作正常。但我不知道它是否适用于更复杂的情况
- C++ 矢量复制适用于一个向量,但不适用于另一个向量