2017-01-13 1 views
-2

Привет, У меня есть код, как показано ниже, и я хочу, чтобы моя программа показывала пользователю (например, я бы использовал ostream в главном), если строка, которую я вводил с cin, соответствует имени пользователя одного пользователя из вектор пользователя;Поиск объекта в векторе объектов

#include<iostream> 
#include<vector> 
using namespace std; 
class User{ 

private: 

char *username; 
char *password; 
int age; 

public: 
User(){..} 
User(char *,char *p, int a){...} 
~User(){..}; 
friend ostream &operator<<(ostream &output, User &u) 
{ 
cout<<"User: "<<u.username<<endl; 
cout<<"Pass: "<<u.password<<Endl; 
} 
char* getUsername(){ return username}; 
char* getPassword(){return password}; 
}; 



template <class T> class Vector 
{ 
private: 
    T* vect; 
    int dim; 

public: 
    Vector() 
    { 
     dim = 0; 
     vect = NULL; 
    } 

    Vector(T*vect, int dim) 
    { 
     this->dim = dim; 
     this->vect = new T(this->dim); 
     for (int i = 0; i < this->dim; i++) 
      this->vect[i] = vect[i]; 
    } 

    Vector(Vector &v) 
    { 
     this->dim = v.dim; 
     this->vect = new T(this->dim); 
     for (int i = 0; i < this->dim; i) 
      this->vect[i] = v.vect[i]; 
    } 

    ~Vector() 
    { 
     if (vect != NULL) 
      delete[]vect; 
    } 

    void output_vect() 
    { 
     cout << "Elements are: " << endl; 
     for (int = 0; this->dim; i++) 
     { 
      cout << this->vect[i] << endl; 
      cout << endl; 
     } 
    } 

    void sort_vect() 
    { 
     T aux; 
     for (int i = 0; i<this->dim - 1; i++) 
      for (int j = i + 1; j<this->dim; j++) 
       if (this->vect[i] < this->vect[j]) 
       { 
        aux = this->vect[i]; 
        this->vect[i] = this->vect[j]; 
        this->vect[j] = aux; 
       } 
    } 

    Vector operator+(Vector &v) 
    { 
     Vector temp; 
     temp.dim = this->dim + v.dim; 
     temp.vect = new T[temp.dim]; 
     for (int i = 0; i < this->dim; i++) 
      temp.vect[i] = this->vect[i]; 
     for (int j = 0; j < v.dim; j++) 
      temp.vect[j + this->dim] = v.vect[j]; 
     return temp; 
    } 


void Search() 
{ 
    //i know this code isn't right in this function, but I really don't know much about templates and stuff; 


Vector<Userr> vectuser(users, 2); 


    string wanteduser; 
    cout << "Type the username you want to find:" << endl; 
    cin >> wanteduser; 

    vector<User>vstl; 


    if (find(vstl.begin(), vstl.end(), wanteduser)!= vstl.end()) 
     vstl.push_back(users[wanteduser]); 
} 

void main() 

{ 

User u1("John","34f",20); 
User u2("Kim","fdfg",18); 

    User users[2] = { u1,u2 }; 

    Vector<User> vectusers(users,2); 
Search(); 

} 

Не могли бы вы помочь мне написать код в функции Search(), чтобы все было сделано? Возможно, я мог бы понять больше. И, пожалуйста, не говорите, почему я не использую струны в классе, это то, что требует мой университет (char). Спасибо.

+0

Возможно, вы могли бы хотя бы подумать о том, как следует вызывать функцию «Поиск». 'void Search (void)' на самом деле является странной сигнатурой ... BTW, что означает «#include », если вы используете пользовательскую реализацию «Vector»? –

ответ

0

Как насчет такой функции? Это то, что вы искали?

bool searchUserByName(std::vector<User>& users, User& target, std::string name) { 
    for (std::vector<User>::iterator it = users.begin(); it != users.end(); it++) 
     if ((*it).getUsername() == name) { 
      target = *it; 
      return (true); 
     } 

    return (false); 
} 

И, пожалуйста, используйте стандартный вектор STL-Container, а не собственный. Лучше будет список. #include <list>

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

  • Нет связанных вопросов^_^