检查向量是否包含具有已输入值的对象

Check if a vector contains object with already entered values

所以我正在为这些事情苦苦挣扎:

我有方法 returns istream 输入并将 istream 输入作为参数,将值发送到 vector 并将它们存储在其中。现在,当我输入 1 个值时,我试图检查 vector 是否已经包含该值,这里是我的代码以更好地理解它:

struct Predmet {
    string naziv;
    string odsjek;
    istream& dodaj_predmet(istream &);
};

struct Student {
    string brojIndeksa;
    string ime;
    string prezime;
    map<std::string, int> ocjene;
    istream& dodaj_studenta(istream &);
};

vector<Student> studenti;
vector<Predmet> predmeti;
Student s;
Predmet p;

istream& Student::dodaj_studenta(istream & input){
    cout << "### Unesite podatke o studentu: " << endl;
    cout << endl;
    cout << "Unesite broj indeksa studenta: " << endl;
    getline(input, brojIndeksa);
    cout << endl;
    cout << "Unesite ime studenta: " << endl;
    getline(input, ime);
    cout << endl;
    cout << "Unesite prezime studenta: " << endl;
    getline(input, prezime);
    cout << endl;
    cout << "***     Uspjesno ste unijeli studenta     ***" << endl;
    return input;
}

所以我正在尝试检查为结构成员 brojIndeksa 输入的值是否已经存在于 vector 中,但我不确定该怎么做。

还有我如何向地图添加值,因为我需要添加对 ,但不确定如何添加,因为我需要检查 STRING 是否是在 [=13 中输入的值=] 在 predmeti 向量中?

谢谢。

首先,您可以检查 std::vector 的计数以查看给定的键是否存在

//std::count(v.begin(), v.end(), key)
if (std::count(v.begin(), v.end(), key)){
    //it is inside
}
else{
    //it isn't inside
}

这是一种方法,但你应该做地图

std::map<std::string,int> myMap;
//adding will look like this
std::pair<std::string,int> element;
myMap.insert(element);
//or
myMap.insert(std::pair<std::string,int>(myString,myInt));

将解决您的问题。您添加一对字符串和整数。 为了检查给定的密钥是否存在,你可以做

std::map<std::string, int> m;
if ( m.find(key) == m.end() ) {
  // not found
} else {
  // found
}

添加了 Kyle 注释,因为它是有效的方式,而且看起来更清晰,您还可以像这样查找元素是否存在

if (m.count(key)){
    //key found
}
else{
    //key not found
}

PS。使用 c++ using namespace std; 是不好的做法。您应该始终使用 std::whatever_you_need 而不是

关于检查学生的第一个问题:您可以在输入后添加此搜索。

    auto clean_buf = input.rdbuf()
    ....
    auto resit = std::find_if(v.begin(), v.end(), 
                 [&](auto& student) { 
                   return ( student.brojIndeska == brojIndeska)
                 });
    if(resit != v.end()) {//student exists
      input.rdbuf(clean_buf);
      return input;
     }

对于第二个,您可以使用

添加到地图
map.emplace(var1, var2)