Пример интервальный контейнер демонстрирует характерное поведение различных интервальных контейнеров, которые также суммируются во вводном интервальный комбинирующий стиль.
#include<iostream>#include<boost/icl/interval_set.hpp>#include<boost/icl/separate_interval_set.hpp>#include<boost/icl/split_interval_set.hpp>#include<boost/icl/split_interval_map.hpp>#include"../toytime.hpp"usingnamespacestd;usingnamespaceboost::icl;voidinterval_container_basics(){interval<Time>::typenight_and_day(Time(monday,20,00),Time(tuesday,20,00));interval<Time>::typeday_and_night(Time(tuesday,7,00),Time(wednesday,7,00));interval<Time>::typenext_morning(Time(wednesday,7,00),Time(wednesday,10,00));interval<Time>::typenext_evening(Time(wednesday,18,00),Time(wednesday,21,00));// An interval set of type interval_set joins intervals that that overlap or touch each other.interval_set<Time>joinedTimes;joinedTimes.insert(night_and_day);joinedTimes.insert(day_and_night);//overlapping in 'day' [07:00, 20.00)joinedTimes.insert(next_morning);//touchingjoinedTimes.insert(next_evening);//disjointcout<<"Joined times :"<<joinedTimes<<endl;// A separate interval set of type separate_interval_set joins intervals that that // overlap but it preserves interval borders that just touch each other. You may // represent time grids like the months of a year as a split_interval_set.separate_interval_set<Time>separateTimes;separateTimes.insert(night_and_day);separateTimes.insert(day_and_night);//overlapping in 'day' [07:00, 20.00)separateTimes.insert(next_morning);//touchingseparateTimes.insert(next_evening);//disjointcout<<"Separate times:"<<separateTimes<<endl;// A split interval set of type split_interval_set preserves all interval// borders. On insertion of overlapping intervals the intervals in the// set are split up at the interval borders of the inserted interval.split_interval_set<Time>splitTimes;splitTimes+=night_and_day;splitTimes+=day_and_night;//overlapping in 'day' [07:00, 20:00)splitTimes+=next_morning;//touchingsplitTimes+=next_evening;//disjointcout<<"Split times :\n"<<splitTimes<<endl;// A split interval map splits up inserted intervals on overlap and aggregates the// associated quantities via the operator +=split_interval_map<Time,int>overlapCounter;overlapCounter+=make_pair(night_and_day,1);overlapCounter+=make_pair(day_and_night,1);//overlapping in 'day' [07:00, 20.00)overlapCounter+=make_pair(next_morning,1);//touchingoverlapCounter+=make_pair(next_evening,1);//disjointcout<<"Split times overlap counted:\n"<<overlapCounter<<endl;// An interval map joins touching intervals, if associated values are equalinterval_map<Time,int>joiningOverlapCounter;joiningOverlapCounter=overlapCounter;cout<<"Times overlap counted:\n"<<joiningOverlapCounter<<endl;}intmain(){cout<<">>Interval Container Library: Sample interval_container.cpp <<\n";cout<<"--------------------------------------------------------------\n";interval_container_basics();return0;}// Program output:/* ----------------------------------------------------------------------------
>>Interval Container Library: Sample interval_container.cpp <<
--------------------------------------------------------------
Joined times :[mon:20:00,wed:10:00)[wed:18:00,wed:21:00)
Separate times:[mon:20:00,wed:07:00)[wed:07:00,wed:10:00)[wed:18:00,wed:21:00)
Split times :
[mon:20:00,tue:07:00)[tue:07:00,tue:20:00)[tue:20:00,wed:07:00)
[wed:07:00,wed:10:00)[wed:18:00,wed:21:00)
Split times overlap counted:
{([mon:20:00,tue:07:00)->1)([tue:07:00,tue:20:00)->2)([tue:20:00,wed:07:00)->1)
([wed:07:00,wed:10:00)->1)([wed:18:00,wed:21:00)->1)}
Times overlap counted:
{([mon:20:00,tue:07:00)->1)([tue:07:00,tue:20:00)->2)([tue:20:00,wed:10:00)->1)
([wed:18:00,wed:21:00)->1)}
-----------------------------------------------------------------------------*/
Статья Interval container раздела Chapter 1. Boost.Icl Examples может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.