2016-05-30 56 views
-2

我有一個通用的結構,其中包含一堆數據類型。例如,從字符串得到一個特定的東西基於字符串

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

現在,我有一個學生矢量。

std::vector<student> cls; 

如何獲得某個學生,如果我有char * id?或者還有其他推薦方法嗎?可能會保留學生證和學生結構?

在此先感謝!

+5

當您的變量名稱與語言的關鍵字具有相同的顏色時,有些問題。 – LogicStuff

+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); 

在一旁:你不能用「一流」爲變量的名字,我會建議使用的std :: string,而不是字符*。

+0

你陷入了古老的'strcmp'陷阱並忘記了== 0。 – molbdnilo

+0

@molbdnilo,謝謝:) – thorsan

+1

謝謝!我可能想在這個地方停下來。學生&s = * iter; –

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

+0

這是我可能想要的,也許不是索引,而是它自己的學生結構。我可以微調這一點。謝謝! –

+0

@RCBrand考慮使用std :: string而不是char *,並閱讀std :: map,你可以在O(1)中使用std :: map 和get(id) – Exceptyon

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; 
相關問題