【问题标题】:sort vector of struct element结构元素的排序向量
【发布时间】:2011-10-03 07:15:16
【问题描述】:

我正在尝试对结构元素的向量进行排序,但我无法在此处构建向量本身是代码

#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&lt;student_t&gt;st 时,我无法访问 struct 的元素,请给我提示如何去做

【问题讨论】:

  • 在使用 if 块时放置 {braces}。在编写 if 块时依赖缩进是危险的

标签: c++ stl


【解决方案1】:
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());

【讨论】:

  • @user466534:已编辑答案。也许你应该读一本关于 STL 的书。
【解决方案2】:

对向量进行排序:

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

要读取向量的输入,您应该首先调整向量的大小或将输入设为临时 变量并将其推送到您的向量:

www.cplusplus.com/reference/stl/vector/vector/

【讨论】:

    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 2014-01-23
    • 2022-12-18
    • 2011-05-15
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    相关资源
    最近更新 更多