我有一個通用的結構,其中包含一堆數據類型。例如,從字符串得到一個特定的東西基於字符串
struct student
{
char* name;
char* id;
double avg_score;
};
現在,我有一個學生矢量。
std::vector<student> cls;
如何獲得某個學生,如果我有char * id?或者還有其他推薦方法嗎?可能會保留學生證和學生結構?
在此先感謝!
我有一個通用的結構,其中包含一堆數據類型。例如,從字符串得到一個特定的東西基於字符串
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
這是我可能想要的,也許不是索引,而是它自己的學生結構。我可以微調這一點。謝謝! –
@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
更正了謝謝! –