2014-04-29 5 views
-1

키에 대한 술어를 사용하여 필터링 된 키를 기반으로 맵 값을 리턴하는 어댑터를 작성하는 방법은 무엇입니까? 예를 들어 키에 대한 술어를 사용하여 필터링 된 키를 기반으로 맵 값을 리턴하는 어댑터를 작성하는 방법

: 여기

std::map<int,int> map_obj; 
const int match_value = 0xFF00; 
for(auto& i : map_obj | filtered_key_map_values([match_value](key_type& x){ return (x & match_value) > 0; } | indirected) 
{ 
    std::copy<typeof(i)>(std::cout," ,"); 
} 
+1

다음 시간을 건의 할 것입니다 버전, 당신이로 태그를 지정할 것 [태그 : 부스트 범위, 또는 귀하의 질문에 명확하게 표시하십시오. – sehe

답변

0

내가 Live On Coliru

#define BOOST_RESULT_OF_USE_DECLTYPE 
#include <boost/range/adaptors.hpp> 

using namespace boost::adaptors; 
#include <iostream> 

int main() 
{ 
    std::map<int, std::string> const map_obj { 
     { 0x0001, "one" }, 
     { 0x0002, "two" }, 
     { 0x0003, "three" }, 
     { 0x0404, "four" }, 
     { 0x0005, "five" }, 
    }; 

    const int match_value = 0xFF00; 
    for(auto& v : map_obj 
     | filtered([=](std::pair<const int, std::string> const& p)->bool { return (p.first & match_value) != 0; }) 
     | map_values) 
    { 
     std::cout << v << "\n"; 
    } 
} 
+0

감사합니다. 그래, 재미있을 것 같은데. 나는 더 많이 람다를 들여다 봐야한다고 생각한다. – Shaikat

+0

@Shaikat 알고 싶다면 메인 컴파일러 ** [C++ 11 모드] (http://coliru.stacked-crooked.com/a/7b67ed43a3951ae4) **로 컴파일 할 수도 있습니다. ** (MSVC , gcc, clang)하지만 좀 더 자세한 정보가 있습니다 :) – sehe

+0

필터 사용에 대해 설명해 주셔서 감사합니다. 대부분의 예제는 외부 변수에 의존하지 않는 함수를 사용하는 벡터를 사용합니다. – Shaikat