2017-02-09 3 views
1

C++에서 우선 순위 대기열의 선언을보고 있지만 이해가되지 않습니다.C++ 우선 순위 대기열 선언

priority_queue<string, vector<string>,function<bool(string,string)>> 
min_heap([] (const string& a,const string& b) {return a.size()>=b.size();}); 

대괄호 []의 목적은 무엇입니까? 함수 정의의 일부입니까?

또한 bool 연산자를 사용하여 동일한 것을 구현할 수 있습니까?

+0

λ (http://en.cppreference.com/w/cpp/language/lambda) 함수의 캡처 절. –

+0

람다입니다. C++ 책을 읽으십시오. 람다는 몇 짧은 문장을 완전히 설명 할 수 없습니다 stackoverflow.com –

+0

@SamVarshavchik하지만 여기에 람다에 대한 설명서가 있습니다 : http://stackoverflow.com/documentation/c%2b%2b/572/lambdas#t = 201702161028176658324 – Brian

답변

1

전체 표현식

[] (const string& a,const string& b) {return a.size()>=b.size();} 

람다 식이다. 두 개의 문자열 인수 인 ab을 사용하여 호출 할 수있는 익명의 클래스의 객체이며 bool을 반환합니다.

또한 이러한 클래스를 직접 쓸 수 (그 경우를, 그것의 이름을 것이다) : 당신이 > 대신 >=를 사용해야합니다 비교기는 엄격한 약한 주문해야

struct Comp { 
    bool operator()(const string& a, const string& b) { 
     return a.size() > b.size(); 
    } 
}; 
priority_queue<string, vector<string>, Comp> min_heap; 
// a value of type Comp will be value-initialized 

하는 것으로 .

성능 문제가있는 경우 함수 호출 연산자를 인라인 할 수 있으므로 명명 된 클래스를 정의하는 것이 좋습니다.