我正在尝试对struct的元素进行排序,但我无法构造vector本身就是代码
#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
我无法访问struct的元素时,请告诉我如何操作
答案 0 :(得分:3)
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() */);
修改强>
如果您想使用键盘输入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());
答案 1 :(得分:0)
对矢量进行排序:
sort(st.begin(), st.end(), compare);
要读取向量的输入,您应首先调整向量的大小或输入到临时值 变量并将其推送到矢量: