根据字符串从向量中获取特定项

时间:2016-05-30 13:23:38

标签: c++ vector

我有一个包含大量数据类型的通用结构。例如,

struct student
{
  char* name;
  char* id;
  double avg_score;
};

现在,我有一群学生。

std::vector<student> cls;

如果我有char * id,我怎样才能得到一个特定的学生?或者还有其他推荐的方式吗?可能会保留学生证和学生结构的哈希值吗?

提前致谢!

3 个答案:

答案 0 :(得分:2)

您可以使用std :: find_if

const char* idToFind = "sdfsd";
std::vector<student> cls;
...
auto iter = std::find_if(cls.begin(), cls.end(), [=](student& s) {return strcmp(s.id, idToFind) == 0;});
student& s = *iter; 
int index = std::distance(cls.begin(), iter);

另外:你不能使用“class”作为变量名,我建议使用std :: string而不是char *。

答案 1 :(得分:1)

类似的东西:

int getStudentIndex(std::vector<student> students, char* id) {

    const int sz = students.size();
    for (int i=0; i<sz; i++)
        if (strcmp(students[i].id, id) == 0)
            return i;

    return -1; // not found
}

但我怀疑你可能需要std::map

答案 2 :(得分:0)

std::map本来不错

struct student {
    std::string name;
    double      avg_score;
};

std::map<string, student> m;

然后,找到id

student found;
map<string, student>::iterator it = m.find(id);
if (it != m.end())
    found = it->second;