вектор сортировки элемента структуры - PullRequest
0 голосов
/ 03 октября 2011

я пытаюсь отсортировать вектор элементов структуры, но я не могу построить сам вектор, вот код

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

struct student_t{
      string name;
  int age,score;
}   ;

bool compare(student_t const &lhs,student_t const &rhs){
    if (lhs.name<rhs.name)
         return true;
    else if (rhs.name<lhs.name)
        return false;

    else
        if (lhs.age<rhs.age)
            return true;
        else if (rhs.age<lhs.age)
             return false;
    return lhs.score<rhs.score;

}
int main(){

               struct student_t st[10];







 return 0;
}

когда я объявил vector<student_t>st я не могу получить доступ к элементу структуры, пожалуйста, подскажите, как это сделать

Ответы [ 2 ]

3 голосов
/ 03 октября 2011
std::vector<student_t> st;
for(unsigned i = 0; i < 10; ++i) st.push_back(student_t());
std::sort(st.begin(), st.end(), &compare);

Вы также можете использовать этот конструктор vector вместо строк 1-2:

std::vector<student_t> st (10 /*, student_t() */);

Edit:

Если вы хотите ввести 10 учеников с помощью клавиатуры, вы можете написать функцию, которая конструирует ученика:

struct student_t &enter_student()
{
     student_t s;
     std::cout << "Enter name" << std::endl;
     std::cin >> s.name;
     std::cout << "Enter age" << std::endl;
     std::cin >> s.age;
     std::cout << "Enter score" << std::endl;
     std::cin >> s.score;
     return s;
}
std::vector<student_t> st;
for(unsigned i = 0; i < 10; ++i) st.push_back(enter_student());
0 голосов
/ 03 октября 2011

для сортировки вектора:

sort(st.begin(), st.end(), compare);

и для считывания ввода в ваш вектор сначала необходимо изменить размер вектора или ввести его во временный переменной и вставьте ее в ваш вектор:

www.cplusplus.com / ссылка / СТЛ / вектор / вектор /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...