2

我需要将一些间隔(实际上这些是地址间隔)映射到对象 ID。

我尝试使用boost的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-May-20 19:30:00, 2008-May-20 20:10:00): Harry Mary
    [2008-5-20 20:10:00,2008-5-20 22:15:00):戴安娜·哈里·玛丽·苏珊
    [2008-May-20 22:15:00, 2008-May-20 23:00:00):戴安娜·哈里·玛丽·彼得·苏珊
    [2008-May-20 23:00:00,2008-May-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() 被定义为“返回 [ing] 键 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 回答