Почему этот простой пользовательский компаратор для вектора-вектора вызывает сбой?

Следующий код вылетает, когда я вызываю std:: sort для bks (вектор векторов) формы [20000][3]. Похоже, что компаратор compBks() вызывается на v1 размера 0 и v2 размера 3 после 20000 обращений к compBks, что может вызвать сбой.

Но почему compBks вызывается с недействительным v1?

Любая причина?

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.

Почему v1 когда-либо получит размер 0, если std:: sort правильно вызывается для bks?

0 ответов

Другие вопросы по тегам