interval map in C++

I need to map some intervals (actually these are intervals of addresses) to object ids.

I tried to use boost's interval_map, the example looks very pretty, it easily enumerates all intervals like:

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;
}

Which outputs:

    ----- History of party guests -------------------------
    [2008-May-20 19:30:00, 2008-May-20 20:10:00): Harry Mary
    [2008-May-20 20:10:00, 2008-May-20 22:15:00): Diana Harry Mary Susan
    [2008-May-20 22:15:00, 2008-May-20 23:00:00): Diana Harry Mary Peter Susan
    [2008-May-20 23:00:00, 2008-May-21 00:00:00): Diana Peter Susan
    [2008-May-21 00:00:00, 2008-May-21 00:30:00): Peter

but it cannot do something like this:

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;

it outputs: error: no match for 'operator[]' in 'party[when]' it looks strange, since the main function of map is in operator[]

so I cannot get information "who were at the party at a given time"

Is there a ready-to-use solution for this problem?

Upvotes: 2

Views: 3619

Answers (1)

DickNixon
DickNixon

Reputation: 151

It's somewhat counter-intuitive, but the () operator is what you're looking for. From the docs, operator() is defined as "Return[ing] the mapped value for a key x. The operator is only available for total maps."

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

Upvotes: 2

Related Questions