从字符串得到一个特定的东西基于字符串
问题描述:
我有一个通用的结构,其中包含一堆数据类型。例如,从字符串得到一个特定的东西基于字符串
struct student
{
char* name;
char* id;
double avg_score;
};
现在,我有一个学生矢量。
std::vector<student> cls;
如何获得某个学生,如果我有char * id?或者还有其他推荐方法吗?可能会保留学生证和学生结构?
在此先感谢!
答
您可以使用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);
在一旁:你不能用“一流”为变量的名字,我会建议使用的std :: string,而不是字符*。
答
类似:
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
+0
这是我可能想要的,也许不是索引,而是它自己的学生结构。我可以微调这一点。谢谢! –
+0
@RCBrand考虑使用std :: string而不是char *,并阅读std :: map,你可以在O(1)中使用std :: map
答
一个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;
当您的变量名称与语言的关键字具有相同的颜色时,有些问题。 – LogicStuff
更正了谢谢! –