質問

前の検索の結果によって 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);

しかし、指定された2つのイテレータによってcorespの高さの検索を制限するにはどうすればよいですか? (そして、その結果で最高値を持つオブジェクトを見つけますか?)

役に立ちましたか?

解決

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

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

他のヒント

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

理解可能で問題に当てはまることを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top