3

boost::multi_index以前の検索の結果で検索を制限するにはどうすればよいですか? 例として、次のような内部値を持つ長方形クラスがあるとします。

    class MyRect
    {
    public:
        int    width;  
        int    height; 

        double value;
    }

そして、「与えられた-その長方形に含まれ、最も高い値を持つ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 の高さの検索を、与えられた 2 つの反復子で制限するにはどうすればよいでしょうか? (その後、その結果で最も高い値を持つオブジェクトを見つけますか?)

4

2 に答える 2

0

あなたの問題を正しく理解していれば、もっと簡単な解決策があるかもしれません。MyRects を値順に並べた STL-Set に入れるだけです (比較演算子またはカスタム比較関数を定義する必要があります)。特定の MyRect が特定の範囲内にあるかどうかをチェックするカスタム述語を作成して使用できます。次に、STL-Algorithm を使用しfind_ifて、カスタム述語を渡します。(reverse_iterator を使用するなどして) 降順でシーケンスをトラバースすることを確認すると、探している MyRect が返されます。

それが理解でき、あなたの問題に当てはまることを願っています。

于 2009-11-30T11:38:04.600 に答える
0

インプレース制限を行うことはできないと思います。
一致する幅のクエリの結果の反復子を別のコンテナーに格納し、そのコンテナーを使用して、remove_if で一致する高さを見つけます。次に max_element を使用して最大のものを見つけます。

要素をポインターとして保存する場合、同じ MIC を使用して結果を保存できます。

于 2009-11-30T11:56:41.533 に答える