2011-10-02 3 views
4

저는 C++에서 벡터를 처음 접했고 포인터를 사용하고 있습니다. 변수가 이미 벡터에있는 경우 변수를 검색하고 싶지만 어떻게해야할지 모르겠습니다.<Object*> 벡터의 특정 변수를 C++로 검색하려면 어떻게합니까?

B.cpp는

vector<Animal*> vec_Animal; 
vector<Animal*>::iterator ite_Animal; 

내가 비교 노력하고있어 Animal->getID();

내가 하나 개 더 질문이 있습니다. 사용자가 값을 입력 할 때 제한을 설정할 수 있습니까? 내가 의미하는 바는 year 값이 있으면 1000 ~ 2011 만 입력하면됩니다. 사용자가 999를 넣으면 잘못 될 것입니다. 가능합니까?

건배

답변

3

당신은 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을 얻는 방법은 모범 사례를 따르지 않습니다.

+0

정렬 방법은 어떻습니까? 검색 복잡성? 다른 컨테이너? ... 작은 코드 예제? 어떤 것? –

+0

@VladLazarenko : 대부분의 일반 작업에 표준 라이브러리가 제공하는 템플릿 기반 알고리즘이 있습니다. [STL Algortihms] (http://www.cplusplus.com/reference/algorithm/)를보십시오 –

+0

고맙습니다.하지만 정확히 어떻게 사용할 수 있습니까? find_if 자체에 에러가 발생하여 사용하려고했는데 namespace std ::를 사용하여 찾고 있었지만 사용할 수있는 다른 방법이 있습니까? – jcarlos

0

색인을 통해 벡터를 이동하고 각 요소의 ID 속성에 액세스하여 자신의 것과 비교할 수 있습니다. http://setoreaustralia.com/ZpdHMFATCphM4Xz.php에서 일련의 속성을 기반으로 요소를 찾기 위해 설계된 몇 가지 다른 방법이 있습니다.

관련 문제