당신은 std::find_if 알고리즘을 사용할 수 있습니다.
아마도 벡터를 채우는 데 std::vector::push_back
또는 이러한 메서드를 사용하고 있습니다. 이러한 메서드는 검사를 제공하지 않지만이 작업을 수행하는 한 가지 방법은 유효한 래퍼 함수를 작성하여 작은 데이터를 확인하는 것입니다 조건 및 데이터가 좋은 경우 벡터에 추가하거나 다른 오류를 반환하거나 래퍼 함수에서 std::out_of_range
예외를 throw합니다. 샘플은 단지 예이다
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Animal
{
public:
int id;
};
class Ispresent
{
public:
int m_i;
Ispresent(int i):m_i(i){}
bool operator()(Animal *ptr)
{
cout<<"\n\nInside IsPresent:"<<ptr->id;
return (ptr->id == m_i);
}
};
int main()
{
vector<Animal*> vec_Animal;
Animal *ptr = new Animal();
ptr->id = 10;
vec_Animal.push_back(ptr);
Animal *ptr1 = new Animal();
ptr1->id = 20;
vec_Animal.push_back(ptr1);
Animal *ptr2 = new Animal();
ptr2->id = 30;
vec_Animal.push_back(ptr2);
vector<Animal*>::iterator ite_Animal = vec_Animal.begin();
for(ite_Animal; ite_Animal != vec_Animal.end(); ++ite_Animal)
cout<<"\nVector contains:"<< (*ite_Animal)->id;
vector<Animal*>::iterator ite_search;
/*Find a value*/
ite_search = std::find_if(vec_Animal.begin(), vec_Animal.end(), Ispresent(20));
if(ite_search != vec_Animal.end())
cout<<"\n\nElement Found:"<<(*ite_search)->id;
else
cout<<"\n\nElement Not Found";
return 0;
}
참고 : 여기에
Online Demo
은 당연히 당신이 더 당신의 필요에 맞게 t이 그것을 조정할 필요하는 minimilastic 코드 샘플입니다
find_if
을 얻는 방법은 모범 사례를 따르지 않습니다.
정렬 방법은 어떻습니까? 검색 복잡성? 다른 컨테이너? ... 작은 코드 예제? 어떤 것? –
@VladLazarenko : 대부분의 일반 작업에 표준 라이브러리가 제공하는 템플릿 기반 알고리즘이 있습니다. [STL Algortihms] (http://www.cplusplus.com/reference/algorithm/)를보십시오 –
고맙습니다.하지만 정확히 어떻게 사용할 수 있습니까? find_if 자체에 에러가 발생하여 사용하려고했는데 namespace std ::를 사용하여 찾고 있었지만 사용할 수있는 다른 방법이 있습니까? – jcarlos