首先,如果搜索包含是您想要做的主要事情,請不要使用map
作爲std::pair<double, double>
。這不僅僅是一個對數據結構有意義的操作。
但如果你堅持,代碼看起來像這樣(在C++ 11):
bool isWithinInterval() const {
for (const auto& pr : _sequence) {
if (_currentTime >= pr.first.first && _currentTime <= pr.first.second) {
return true;
}
}
return false;
}
預C++ 11,同樣的想法,只是略有不同的循環語法。理想情況下,我們使用std::find_if
,但表達地圖的value_type
是一件麻煩事。在C++ 14雖然沒有這樣的麻煩:
auto it = std::find_if(_sequence.begin(),
_sequence.end(),
[_currentTime](const auto& pr) {
return _currentTime >= pr.first.first && _currentTime <= pr.first.second;
});
return it != _sequence.end();
或者只是:
return std::any_of(_sequence.begin(), _sequence.end(),
[_currentTime](const auto& pr) {
return _currentTime >= pr.first.first && _currentTime <= pr.first.second;
});
'的std ::地圖<...>'是不是[範圍樹(http://en.wikipedia.org/wiki/Range_tree)... –
你可能會需要編寫自定義比較HTTP:/ /msdn.microsoft.com/en-us/library/ms132092%28v=vs.110%29.aspx – gmlacrosse
查看['boost interval container library'](http://www.boost.org/doc/)庫/ 1_57_0 /庫/ ICL/DOC/HTML/index.html的)。從文檔:An ['interval_map'](http://www.boost。org/doc/libs/1_57_0/libs/icl/doc/html/boost/icl/interval_base_map.html)是一個以間隔值對映射實現的映射 –