Как исправить правильное использование пользовательского lower_bound

#c #lower-bound

#c #нижняя граница

Вопрос:

Я новичок в C . Я пытался задать вопрос с исходным кодом (436. Найдите правильный интервал). Думал усложнить это, написав свой собственный lower_bound только для моих знаний. Но приведенный ниже код показывает мне runtime error: reference binding to null pointer of type 'value_type' (stl_vector.h) . Я не могу понять, в чем проблема, не мог бы кто-нибудь, пожалуйста, разъяснить, что я делаю не так.

 class Solution {
public:
    vector<int> findRightInterval(vector<Interval>amp; intervals) {
        int n = intervals.size();
        vector<int> res;
        vector<pair<Interval, int>> s_i;
        for(int i = 0; i<n; i  ) {
            s_i.push_back(make_pair(intervals[i], i));
        }
        sort(s_i.begin(), s_i.end(), [](const pair<Interval, int>amp; a, const pair<Interval, int> amp;b) -> bool {
            return a.first.start < b.first.start;
        });

        for(auto x : s_i) {
            cout<<"["<<x.first.start<<","<<x.first.end<<"],"<<x.second<<endl;
        }


        for(int i = 0; i<n; i  ) {
            int val = intervals[i].end;
            cout<<val<<endl;
            //pair<Interval, int> temp = make_pair(Interval(val, val), 0);

            auto it = lower_bound(s_i.begin(), s_i.end(), val,
                                  [](const pair<Interval, int> amp;a, int val) -> bool {
                                      return a.first.start < val;
                                  });
            if (it != s_i.end()) {
                res[i] = it->second;
            } else {
                res[i] = -1;
            }

        }

        return res;
    }
};
  

Комментарии:

1. res[i] — Вы выходите за рамки здесь? Я не вижу, где res находится размер, соответствующий требуемым записям. Попробуйте res.at(i) = it->second; и res.at(i) = -1; и посмотрите, будет ли выдано std::out_of_range исключение.

2. Выходит за рамки, и, возможно, ваша сортировка не соответствует ожиданиям std::lower_bound . Вы сортируете интервалы по их начальным позициям, но впоследствии сравниваете их с конечной позицией. Может ли случиться так, что после вашей сортировки после вашей желаемой конечной позиции будет начальная позиция?

3. @PaulMcKenzie Правильно. Виноват, я запутался из-за ошибки, думал, проблема в моем lower_bound. Спасибо.

4. Проблема была исправлена после изменения vector<int> res; на vector<int> res(n, -1); .