我有一个对象的地图,由日期键入(存储为双精度)。我想根据日期过滤/提取对象,所以我写了一个类似于下面代码片段的函数。使用lower_bound()和upper_bound()来选择记录
但是,我发现如果我提供的日期低于最早日期或大于最后日期,则代码将失败。我修改了代码,以便将任何低于第一个日期的输入startdate设置为地图中的第一个(即最低)日期,同样,enddate> last date设置为地图中的最后(最长)日期
void extractDataRecords(const DatedRecordset& recs, OutStruct& out, const double startdt, const double enddt)
{
double first = recs.begin()->first, last = recs.rbegin()->first;
const double sdate = (start < first) ? first : startdt;
const double edate = (enddt > last) ? last : enddt;
DatedRecordsetConstIter start_iter = recs.lower_bound(sdate), end_iter = recs.upper_bound(edate);
if ((start_iter != recs.end()) && (end_iter != recs.end()))
{
// do Something
}
}
这是实现这种行为的正确方法吗?
“代码失败”是什么意思?如果'startdt <= recs.begin() - > first',那么'recs.lower_bound(startdt)'应该给你'recs.begin()'。 – 2011-03-01 02:42:45