문제

검색을 어떻게 제한합니까? boost::multi_index 이전 검색의 결과로? 예를 들어 : 다음과 같은 내부 값을 가진 사각형 클래스가 있다고 가정합니다.

    class MyRect
    {
    public:
        int    width;  
        int    height; 

        double value;
    }

그리고 "주어진 an과 같은 쿼리에 답변하려면 그러한 객체의 데이터 구조가 필요합니다. input_rectangle - 어떤 개체 MyRect 그 사각형에 포함되어 있고 가장 높은 값이 있습니까? "

다음과 같은 'multi_index'를 사용할 수 있습니다.

    struct given_value{};
    struct given_width{};
    struct given_height{};

    typedef multi_index_container<MyRect,
        indexed_by<
            ordered_non_unique< tag<given_value>, 
                member<MyRect, double, &MyRect::value>,
            ordered_non_unique< tag<given_width>, 
                member<MyRect, int, &MyRect::width>,
            ordered_non_unique< tag<given_height>, 
                member<MyRect, int, &MyRect::height>, >
        >
    > MyDataStructure;

    typedef MyDataStructure::index<given_width>::type MyDataStructureGivenWidth;
    typedef MyDataStructureGivenWidth::iterator WidthIterator;

input_rectangle 너비가 있습니다 input_width 나는 다음과 같은 것을 사용할 수 있습니다.

WidthIterator start_iter = data_object.get<given_width>().begin();
WidthIterator end_iter   = data_object.get<given_width>().upper_bound(input_width);

그러나 주어진 두 반복자에 의한 Coresp 높이 검색을 어떻게 제한합니까? (그 후 그 결과 그 결과에서 가장 높은 값을 가진 객체를 찾으십니까?)

도움이 되었습니까?

해결책

나는 당신이 안락한 제한을 할 수 있다고 생각하지 않습니다.
일치하는 폭 쿼리의 결과 반복자를 다른 컨테이너에 저장하고 해당 컨테이너를 사용하여 remove_if와 일치하는 높이를 찾으십시오. 그런 다음 max_element를 사용하여 가장 큰 것을 찾으십시오.

요소를 포인터로 저장하면 동일한 마이크를 사용하여 결과를 저장할 수 있습니다.

다른 팁

문제를 올바르게 이해하면 더 간단한 솔루션이있을 수 있습니다. MyRect를 값으로 주문한 STL 세트에 넣으십시오 (비교 연산자 또는 사용자 정의 비교 함수를 정의해야 함). 귀하는 사용자 정의 술어를 만들 수 있으며 주어진 MyRect가 특정 범위 내에 있는지 확인합니다. 그런 다음 stl-algorithm을 사용합니다 find_if, 그리고 그것을 관습 술어를 건네주십시오. 순서가 감소하여 순서를 가로 지르는지 확인하면 (예 : reverse_iterator를 사용하여) 찾고있는 Myrect를 반환해야합니다.

그것이 이해할 수 있고 당신의 문제에 적용되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top