为什么此简单的矢量向量自定义比较器会导致崩溃?

时间:2019-07-07 05:34:21

标签: c++ sorting std comparator custom-compare

当我在格式为[20000] [3]的bks(向量的向量)上调用std :: sort时,以下代码崩溃。 似乎在对compBks进行了20000次调用后,比较器compBks()在大小为0的v1和大小为3的v2上被调用,这可能导致崩溃。

但是为什么用无效的v1调用compBks?

任何原因?

class Solution {
public:
    struct compBks {
        bool operator() (vector<int> v1, vector<int> v2) {
            cout << v1.size() << " " << v2.size() << endl;
            if (v1[0] < v2[0]) return true;
            else if (v1[0] == v2[0]) 
                return v1[1] <= v2[1];
            return false;
        }
    };

    vector<int> corpFlightBookings(vector<vector<int>>& bks, int n) {
        vector<int> res(n, 0);
        sort(bks.begin(), bks.end(), compBks());
        return res;
    }
};

int main() {
   Solution s;
   vector<vector<int>> bks(20000, {1, 20000, 10000});
   s.corpFlightBookings(bks, 20000);
}

崩溃是:运行时错误:引用绑定到类型为'value_type'(stl_vector.h)的空指针

在崩溃之前,compBks()将v1.size打印为0,将v2.size打印为3。

如果为bks正确调用std :: sort,为什么v1的大小会为0?

0 个答案:

没有答案