Форум программистов, компьютерный форум CyberForum.ru

Контейнер map ? - C++

Восстановить пароль Регистрация
 
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
27.02.2013, 14:58     Контейнер map ? #1
Не совсем удается разобраться Не удается разобраться с ассоциативными контейнерами !
Как выглядит объявление функции в псевдокоде?
Что делает std::less<T> ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2013, 14:58     Контейнер map ?
Посмотрите здесь:

C++ Ассоциативный контейнер типа map
контейнер map C++
C++ Контейнер map, с двумя ключами?
C++ Контейнер map
C++ Чтение из файла в контейнер map
C++ Контейнер map
Перевернуть контейнер map? C++
Map контейнер сортировка C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,281
27.02.2013, 15:59     Контейнер map ? #2
куски которые возможно натолкнут на мысли
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
template <class type>
class factory
{
public:
    std::map<unsigned, type *> objs;
 
    virtual ~factory(void)
    {
        for
        (
            std::map<unsigned, type *>::iterator i = objs.begin();
            i != objs.end();
            i++
        )
            delete i->second;
    }
 
    void insert(type * const obj)
    {
        objs.insert(std::map<unsigned, type *>::value_type(obj->type_id(), obj));
    }
    type *blank(const unsigned type_id)
    {
        type *p = objs.find(type_id)->second;
        return p? p->blank() : 0;
    }
};
это фабрика создающая объект по идентификатору типа. использовал для считывания объектов из файла. перед считыванием фабрика заполнялась образцами объектов. делалось это для того что бы по этим образцам создавать чистые копии (объекты могут создавать чистую копию через вызов blank).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    polyline_factory = new factory<polyline>;
    polyline_factory->insert(new polyline);
    polyline_factory->insert(new rect);
    polyline_factory->insert(new triangle);
    polyline_factory->insert(new trapezium);
    polyline_factory->insert(new line);
    polyline_factory->insert(new point);
    polyline_factory->insert(new circle);
    polyline_factory->insert(new ellipse);
    polyline_factory->insert(new arc);
    polyline_factory->insert(new txt);
 
    READ_UINT(objs_size)
 
    for (int i = 0; i < objs_size; i++)
    {
        READ_UINT(type_id)
 
        polyline *p = polyline_factory->blank(type_id);
        if (!(p && p->load(is)))
        {
            if (p) printf_ex("load error (obj id=%i)\n", p->id);
            else printf_ex("load error obj=0\n");
            return false;
        }
        us_objs->insert(p);
    }
если бы вместо ключа стандартного типа unsigned я бы использовал какой-нибудь свой экзотический тип мне нужно было бы расширять шаблон функцией сравнения что бы он мог при вставке и поиске элементов корректно проходить по списку как то так (на примере set):
C++
1
2
3
4
5
6
7
8
9
10
11
class less_for_layer:
    public std::binary_function<layer *, layer *, bool>
{
public:
    bool operator () (layer * const x, layer * const y) const;
};
bool less_for_layer::operator () (layer * const x, layer * const y) const
{
    return x->id < y->id;
}
std::set<layer *, less_for_layer> *ls;
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
28.02.2013, 20:03  [ТС]     Контейнер map ? #3
Жесткий пример, но он ответил на 2 других вопроса заочно...
Yandex
Объявления
28.02.2013, 20:03     Контейнер map ?
Ответ Создать тему
Опции темы

Текущее время: 22:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru