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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ячейка заполненной строки не перезаписывается http://www.cyberforum.ru/cpp-beginners/thread796251.html
Есть массив со строкой. Одну из его ячеек необходимо перезаписать, но этого не получается. Используемое ПО - Visual Studio 2008 (версию по-новее просто не потянет комп ( ). Код (я его предельно упростила): #include <iostream> #include <stdio.h> using namespace std; void main() {
C++ Дан текст из цифр и строчных латинских букв, за которым следует точка Дан текст из цифр и строчных латинских букв, за которым следует точка. Определите какие буквы- гласные (A,E,I,O,u)или согласных-больше в этом тексте. http://www.cyberforum.ru/cpp-beginners/thread796248.html
C++ Даны координаты вершин много угольника
Даны координаты вершин много угольника (x1,y1,x2,y2,...,x10,y10).Напишите программу для вычисления его перемитра (вычисление расстояния между вершинами оформить подпрограммой.
Вычислить C++
Вычислить Z=(x+y)/(k*n),где x и k- сумма и количетсвоположительных элементов массива А(40), где y и n - сумма и количество отрицательных элементов массива B(50). Определение суммы и количества положительных и отрицательных элементов выполнить в подпрограмме.
C++ Рассчитать радиус окружности, вписанной в треугольник и описанной http://www.cyberforum.ru/cpp-beginners/thread796244.html
Рассчитать радиус окружности, вписанной в треугольник и описанной вокруг треугольника, зная его стороны.
C++ как составить программу угадай цифру с 5 попыток? как составить программу угадай цифру с 5 попыток? подробнее

Показать сообщение отдельно
vxg
Модератор
3023 / 1825 / 190
Регистрация: 13.01.2012
Сообщений: 6,925
27.02.2013, 15:59     Контейнер map ?
куски которые возможно натолкнут на мысли
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;
 
Текущее время: 21:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru