2

いくつかの間隔 (実際にはこれらはアドレスの間隔です) をオブジェクト ID にマップする必要があります。

ブーストの interval_map を使用しようとしました。例は非常にきれいに見えます。次のようにすべての間隔を簡単に列挙します。

while(it != party.end())
{
    interval<ptime>::type when = it->first;
    // Who is at the party within the time interval 'when' ?
    GuestSetT who = (*it++).second;
    cout << when << ": " << who << endl;
}

どの出力:

    ----- パーティーゲストの歴史 -------------------------
    [2008 年 5 月 20 日 19:30:00、2008 年 5 月 20 日 20:10:00): ハリー メアリー
    [2008 年 5 月 20 日 20:10:00、2008 年 5 月 20 日 22:15:00): ダイアナ ハリー メアリー スーザン
    [2008 年 5 月 20 日 22:15:00、2008 年 5 月 20 日 23:00:00): ダイアナ ハリー メアリー ピーター スーザン
    [2008 年 5 月 20 日 23:00:00、2008 年 5 月 21 日 00:00:00): ダイアナ ピーター スーザン
    [2008 年 5 月 21 日 00:00:00、2008 年 5 月 21 日 00:30:00): ピーター

しかし、次のようなことはできません:

interval<ptime>::type when = 
    interval<ptime>::closed(
        time_from_string("2008-05-20 22:00"),
        time_from_string("2008-05-20 22:01"));

    GuestSetT who = party[when];

    cout << when << ": " << who << endl;

それは出力します: error: no match for 'operator[]' in 'party[when]' map の主な機能が operator[] にあるので、奇妙に見えます

そのため、「特定の時間に誰がパーティーにいたか」という情報を取得できません

この問題に対してすぐに使用できるソリューションはありますか?

4

1 に答える 1

2

多少直感に反しますが、() 演算子が探しているものです。ドキュメントから、operator() は「キー x のマップされた値を返します。演算子は、合計マップでのみ使用できます。」と定義されています。

ソース: http://www.boost.org/doc/libs/1_54_0/libs/icl/doc/html/boost_icl/function_reference/selection.html

于 2013-09-05T19:17:42.500 に答える