2014-11-30 1 views
-2

C++에서 개체 멤버가 특정 값과 일치하면 목록에서 개체를 찾고 싶습니다.개체 멤버 값을 기준으로 목록에서 개체를 찾는 방법

class gate{ 
public: 
    std::string type; 
} 

class netlist { 
    std::list<gate *> gates_; 
    void identify_out_gate(); 
} 

이제 해당 유형에 따라 목록에서 특정 게이트를 찾고 싶습니다. 다음을 사용하고 있습니다 :

netlist::identify_out_gate() 
{ 
    for (std::list<gate *>::const_iterator out_gate = gates_.begin(); out_gate != gates_.end(); ++out_gate) 
    { 
     if((*out_gate)->type == "output") 
     { 
      //do something...... 
     } 
    } 
} 

그러나 내가 find 또는 find_if와 같은 것을 사용할 수 있는지 알고 싶습니다. 어떻게합니까?

+0

'find'와'find_if'는 C++ 표준의 일부입니다. 나는 당신이 [이 우수한 자원] (http://en.cppreference.com/w/)과상의함으로써 예를 들어, 당신의 문제로 당신의 문제를 풀어 볼 것을 제안한다. – Walter

답변

3

확실히. 예를 들어 :

auto iter = std::find_if(gates_.begin(), 
         gates_.end (), 
         [](gate const *g) { return g->type == "output"); }); 

iter

유형 std::list<gate*>::iterator을해야 할 것입니다.

하나의 요소 만 찾습니다. 다음 항목을 찾으려면 find_if(iter + 1, gates_.end(), ...)을 사용하십시오. 또한 iter != gates_.end()을 확인하십시오. iter == gates_.end() 인 경우 아무것도 찾을 수 없으므로 확인하십시오.

+0

안녕하세요 Wintermute, 답장을 보내 주셔서 감사합니다.하지만이 오류를 구현할 때 "오류 : 예상 기본 표현식이 [[ '토큰'] 앞에 ...? –

+0

컴파일러는 람다 클로저를 위해 C++ 11을 알아야합니다. gcc 나 clang으로 작업한다면 -std = C++ 11 (이전 버전을 사용하는 경우 -std = C++ 0x)을 전달하십시오. C++ 11을 사용하고 싶지 않다면 (!) 함수'bool is_output_gate (gate const * g) {return g-> type == "output"; }'와'is_output_gate'를 사용합니다. – Wintermute

관련 문제