1083. List Grades

Direct Link

#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

struct stu {
    string name;
    string ID;
    int grade;
    bool operator() (const stu &o) {
        return this->grade < o.grade;
    }
} tmp, L, R;

bool cmp(const stu &a, const stu &b) {
    return a.grade < b.grade;
}

vector<stu> vec;

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> tmp.name >> tmp.ID >> tmp.grade;
        vec.push_back(tmp);
    }
    //°´ÕÕ·ÖÊýµÄ´ÓСµ½´óÅÅÐò
    sort(vec.begin(), vec.end(), cmp);
    cin >> L.grade >> R.grade;
    // ¿¼²ì¶þ·ÖËã·¨£¬ÕâÀïÖ±½ÓʹÓÃSTLËã·¨¸ßЧ¼ò½à
    // STLË㷨ʹÓã¬cmp×îºÃд³É·Âº¯ÊýµÄÐÎʽ
    vector<stu>::iterator itL, itR, iter;
    itL = lower_bound(vec.begin(), vec.end(), L, cmp);
    itR = upper_bound(vec.begin(), vec.end(), R, cmp);

    if (itL == vec.end()) cout << "NONE" << endl;
    else {
        //´Ó´óµ½Ð¡Êä³ö½á¹û
        itR--;
        for (iter = itR; iter >= itL; iter--) {
            cout << iter->name << " " << iter->ID << endl;
        }
    }
    return 0;
}