我有一个包含大量数据类型的通用结构。例如,
struct student
{
char* name;
char* id;
double avg_score;
};
现在,我有一群学生。
std::vector<student> cls;
如果我有char * id,我怎样才能得到一个特定的学生?或者还有其他推荐的方式吗?可能会保留学生证和学生结构的哈希值吗?
提前致谢!
答案 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;