Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Party

Boost , Chapter 1. Boost.Icl , Examples

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

ПримерПартияпоказывает возможности интервальной карты<interval_map>или<split_interval_map>.<interval_map>отображает интервалы для данного содержимого. В этом случае контент представляет собой набор гостей вечеринки, представленный их струнами имен.

Со временем группы людей присоединяются к вечеринке и уходят позже вечером. Поэтому мы добавляем временной интервал и имя, установленное для<interval_map>посещаемости каждой группы людей, которые собираются вместе и уходят вместе. На каждом перекрытии интервалов накапливаются соответствующие наборы имен. В точках перекрытия интервалы разделяются. Накопление контента осуществляется через оператор +=, который должен быть реализован для параметра контента<interval_map>. Наконец, интервал_map содержит историю посещаемости и все моменты времени, где группа гостей вечеринки изменилась.

Сторона демонстрирует принцип, который мы называемсовокупным наложением: При вставке значение, связанное с интервалом, агрегируется с теми значениями в интервале_map, которые перекрываются со вставленным значением. Есть два поведенческих аспектасовокупного наложения:декомпозиционного поведенияиаккумулятивного поведения.

  • декомпозиционное поведениеразделяет интервалы навремяизмерениеинтервала_карты так, что интервалы разделяются всякий раз, когда связанные значения изменяются.
  • аккумулятивное поведениенакапливает ассоциированные значения на каждом перекрытии вставки для ассоциированных значений.

Функция агрегации по умолчанию +=. При желании можно использовать различные агрегаты.

// The next line includes <boost/date_time/posix_time/posix_time.hpp>
// and a few lines of adapter code.
#include <boost/icl/ptime.hpp>
#include <iostream>
#include <boost/icl/interval_map.hpp>
using namespace std;
using namespace boost::posix_time;
using namespace boost::icl;
// Type set<string> collects the names of party guests. Since std::set is
// a model of the itl's set concept, the concept provides an operator += 
// that performs a set union on overlap of intervals.
typedef std::set<string> GuestSetT;
void boost_party()
{
    GuestSetT mary_harry;
    mary_harry.insert("Mary");
    mary_harry.insert("Harry");
    GuestSetT diana_susan;
    diana_susan.insert("Diana");
    diana_susan.insert("Susan");
    GuestSetT peter;
    peter.insert("Peter");
    // A party is an interval map that maps time intervals to sets of guests
    interval_map<ptime, GuestSetT> party;
    party.add( // add and element
      make_pair(
        interval<ptime>::right_open(
          time_from_string("2008-05-20 19:30"),
          time_from_string("2008-05-20 23:00")),
        mary_harry));
    party += // element addition can also be done via operator +=
      make_pair(
        interval<ptime>::right_open(
          time_from_string("2008-05-20 20:10"),
          time_from_string("2008-05-21 00:00")),
        diana_susan);
    party +=
      make_pair(
        interval<ptime>::right_open(
          time_from_string("2008-05-20 22:15"),
          time_from_string("2008-05-21 00:30")),
        peter);
    interval_map<ptime, GuestSetT>::iterator it = party.begin();
    cout << "----- History of party guests -------------------------\n";
    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;
    }
}
int main()
{
    cout << ">>Interval Container Library: Sample boost_party.cpp <<\n";
    cout << "-------------------------------------------------------\n";
    boost_party();
    return 0;
}
// Program output:
/*-----------------------------------------------------------------------------
>>Interval Container Library: Sample boost_party.cpp <<
-------------------------------------------------------
----- 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
-----------------------------------------------------------------------------*/

[Caution]Caution

Мы вводим<interval_maps>с помощьюинтервальной картынаборов струниз-за ее дидактических преимуществ. Партийный пример используется, чтобы дать немедленный доступ к основным идеям интервальных карт иагрегата на перекрытии. Для приложений реального мира не обязательно рекомендуется интервальная карта наборов. Он имеет те же проблемы эффективности, что и<std::map>из<std::sets>. Существует большая область использования интервальных карт с числовыми и другими эффективными типами данных для соответствующих значений.


PrevUpHomeNext

Статья Party раздела Chapter 1. Boost.Icl Examples может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Examples ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 05:08:24/0.0042738914489746/0