2017-12-11 43 views
2

표준 라이브러리 우선 순위 큐를 사용하여 사용자 지정 클래스 Foo의 개체를 주문하려고합니다. 그러나 요소를 비교하는 것은 unordered_map map에 매핑되는 값에 따라 다릅니다.C++의 오버로드 된 연산자에서 로컬 변수 사용

나는 이런 식으로 뭔가를 구축하기 위해 노력하고있어 :

std::unordered_map<Foo,double> map; 
struct Compare { 
    bool operator()(const Foo& a, const Foo& b) { 
     return map[a]<map[b]; 
    } 
} 
std::priority_queue<Foo,std::vector<Foo>,Compare> queue; 

를 보이는 그러나 나는 바깥 쪽 함수의 지역 변수를 참조 할 수 없습니다 것 같은.

이것을 달성하기위한 표준 방법은 무엇입니까?

답변

4

의 멤버 변수로 map에 대한 참조를 저장할 수 있습니다.

당신은 람다를 사용하는 대신 명명 된 함수 객체에 의해 일부 상용구 제거 할 수

:

auto compare = [&map](const auto& a, const auto& b) { 
    return map[a]<map[b]; 
}; 
std::priority_queue<Foo,std::vector<Foo>,decltype(compare)> queue(compare);