2015-12-27 6 views
-2

Я хочу, чтобы найти элемент (фамилию) в моих структурахПоиск элемента в векторе

struct student 
{ 
    char name[20]; 
    char surname[20]; 
    int marks; 
}; 

OFC определяет вектор и поиск элемента с клавиатуры

vector <student> v; 
char search_surname[20]; 

Я элементы ввода от функции:

int size = v.size(); 
    v.push_back(student()); 
    cout << "Input name: " << endl; 
    cin >> v[size].name; 
    cout << "Input surname: " << endl; 
    cin >> v[size].surname; 
    cout << "Input marks: " << endl; 
    cin >> v[size].marks; 

Теперь, когда у меня есть, например, три фамилии в моей структуре (newton, einstein, pascal), я хочу найти фамилию newto n и cout все детали структуры с newton (имя, фамилия, знаки). Я понятия не имею, что мне делать.

ответ

1

метод грубой силы:

for(vector <student>::iterator it = v.begin(); it != v.end(); it++) 
{ 
    if (strcmp(it->surname, "newton") == 0) 
    { 
     cout << "name = " << it->name << endl; 
     cout << "surname = " << it->surname << endl; 
     cout << "marks = " << it->marks << endl; 
    } 
} 

Пожалуйста, добавьте #include <cstring> в код, чтобы использовать strcmp().

+0

Это работает! Спасибо друг! – forqed

0

Недавно я использовал зЬй :: Find() из библиотеки < алгоритма>

Эта функция возвращает итератор, и указывает, обнаружил, когда возвращаемое значение не заканчивается().

1

С STL, вы можете использовать std::find_if из <algorithm>:

std::vector<student> v; 


auto it = std::find_if(v.begin(), v.end(), [](const student& s) 
       { 
        return strcmp(s.surname, "newton") == 0; 
       }); 
if (it != v.end()) { 
    std::cout << "name = " << it->name << std::endl; 
    std::cout << "surname = " << it->surname << std::endl; 
    std::cout << "marks = " << it->marks << std::endl; 
} 

Примечание: я предлагаю использовать std::string вместо char[20] и условие станет return s.surname == "newton".

Смежные вопросы