2015-11-28 3 views
0

Допустим, у меня есть класс, как этотC++ проверить объект является ли класс содержит определенный элемент

class Person 
{ 
private: 
    int id; 
    string name ,lastname; 
    vector<Person> likedperson; 
public: 
//getter setters 
} 

как проверить likedperson имеет определенный идентификатор, как

Person user; 
if(user.likedperson.contains(34)) 
    //do stuff 
else 
    //do stuff 
+0

я взял все likedperson с геттер затем проверить каждый элемент с помощью оператора – asdasdasd

+0

И? Это сработало? Покажите свой код, расскажите, с какими проблемами вы столкнулись. Объясните, почему у вас недостаточно, и что вы ищете в любом ответе. – Andrew

+0

ofc это сработало, но его длинный код и его трудно сделать, что 50 раз ı просто искал простой метод вроде этого – asdasdasd

ответ

1

Вы хотите использовать std::find_if, который использует UnaryPredicate, что-то вроде:

if (std::find_if(std::begin(likedperson), std::end(likedperson), 
    [](const Person& p) -> bool { return p.id == 34; }) != std::end(likedperson)) { 
0

В отличие от некоторых языков C++ в основном разделяет алгоритмы, которые работают с контейнерами (вещи, которые хранят данные) из самих контейнеров.

Существует стандартный алгоритм поиска элемента, если он существует, в любом контейнере: std::find. (См http://en.cppreference.com/w/cpp/algorithm/find для более подробной информации.)

Вы хотите что-то вроде

if (std::find(likedperson.begin(), likedperson.end(), 34) != likedperson.end()) 
+0

Должен ли я использовать вот так? If (std :: find (user [0] .likedperson.begin(), user [0] .likedperson.end(), 32)! = User [0] .likedperson.end()) – asdasdasd

+0

Да, если 'user' является массивом или вектором. Хотя вы можете написать это как функцию-член 'Person', а не вне класса, чтобы вы могли называть его как' if (user [0] .likes (32)) '. –

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