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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
#1

Ассоц. массив - C++

22.03.2011, 19:51. Просмотров 471. Ответов 5
Метки нет (Все метки)

Разработайте класс, который бы позволял хранить данные некоторых типов в массиве, индексами которого являются строки. Таким образом, должен работать следующий код:

Пример:
AssocArray var(20);
var["First"]= 5;
printf("%d",var["First"]);//должно напечатать 5
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2011, 19:51     Ассоц. массив
Посмотрите здесь:

Ассоц. и послед. контейнеры. Разница в методах и алгоритмах. C++
Дан массив A[N]. заполнить массив В[N] элементами массива A[N], которые удовлетворяют двойному неравенству C++
Массив: Переписать элементы одномерного массива A, попадающие в интервал [2, 6], в массив B. C++
C++ Найти ошибку. Записать 20 целых чисел в массив. Переписать отрицательные в массив А, а положительные в Б
Файлы и массив (сделать так, чтобы массив заполнялся значениями из этого же файла) C++
C++ Включить новый элемент в массив, упорядоченный по возрастанию, с сохранением упорядоченности. (рандомный массив)
C++ Задано массив строк произвольной длины. Отформатировать данный массив по ширине поля.
Создать третий массив, в котором собрать элементы массива A, которые не включаются в массив B C++
C++ Из двух целочисленных массивов различной размерности сформировать общий массив. Упорядочить полученный массив
Задан массив из k символов. Преобразовать массив следующим образом: расположить символы в обратном порядке C++
Записать все положительные элементы матрицы в массив arrP, а отрицательные - в массив arrN C++
C++ Описать класс Массив, найти массив, состоящий из элементов первого и второго массива

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
23.03.2011, 03:01     Ассоц. массив #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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#include <utility>
#include <string>
#include <iostream>
 
//Если не будет компилироваться - убрать все вхождения std.
template<class Value>
class Map
{
    //typedef-ы для удобства. Псевдонимы для типов.
    typedef std::string _Key;
    typedef Value _Val;
    typedef std::pair<_Key, _Val> _Ty;
public:
    //Конструктор по умолчанию. Размер - ноль, массив - ноль.
    Map():sz(0)
    {
        Array=0;
    }
    //Констр с параметром. Инициализируем массив и выделяем память под sz_ элементов.
    Map(size_t sz_):sz(sz_)
    {
        Array=new _Ty[sz_];
    }
    //Конструктор копирования
    Map(const Map& other)
    {
        //Выделяем память.
        Array=new _Ty[other.sz];
        sz=other.sz;
        //Копируем элементы.
        for(size_t i=0; i<sz; ++i)
        {
            Array[i]=other.Array[i];
        }
    }
    //Деструктор. Удаляем.
    ~Map()
    {
        delete[] Array;
    }
    //Оператор присваивания
    Map& operator =(const Map& other)
    {
        //Если объекту присваивается он же сам
        if(this == &other)
            //Возвращаем объект
            return *this;
        //Чистим память.
        delete[] Array;
        //Выделяем память, меняем размер, копируем элементы.
        Array=new _Ty[other.sz];
        sz=other.sz;
        for(size_t i=0; i<sz; ++i)
            Array[i]=other.Array[i];
        //Возвращаем измененный объект.
        return *this;
    }
    //Очистка. Размер ставим нулевым. Массиву ставим указатель на ноль.
    void clear()
    {
        sz=0;
        Array=0;
    }
    //Вставка элемента в конец.
    void insert(const _Ty& one)
    {
        //Временный массив.
        _Ty* TmpArray;
        //Выделяем память на 1 больше чем в массиве сейчас.
        TmpArray=new _Ty[sz+1];
        //Копируем элементы из нашего массива во временный.
        for(size_t i=0; i<sz; ++i)
            TmpArray[i]=Array[i];
        //Добавляем в конец временного элемент.
        TmpArray[sz]=one;
        //Очищаем память.
        delete[] Array;
        //Присваиваем указатели. Итого Array теперь указывает на
        //первый элемент TmpArray.
        Array=TmpArray;
        ++sz;
    }
    //Удаление элемента по ключу.
    //Возвращает true, если удалили, false, если элемента нет.
    bool erase(const _Key& one)
    {
        //Если размер нулевой вызываем функцию, кидающую исключение.
        if(sz == 0)
            Empty_Error();
        //Циклом по всему нашему массиву
        for(size_t i=0; i<sz; ++i)
        {
            //Если ключ элемента совпадает с нужным ключом
            if(Array[i].first == one)
            {
                //Создаем временный массив размером на 1 элемент меньше
                //И копируем туда старый, за исключением нужного ключа.
                _Ty* Tmp=new _Ty[sz-1];
                int k=0;
                for(size_t j=0; j<sz; ++j)
                {
                    if(Array[j].first == one)
                        continue;
                    Tmp[k]=Array[j];
                    ++k;
                }
                //Очищаем память.
                delete[] Array;
                //Теперь указывает на начало Tmp.
                Array=Tmp;
                sz-=1;
                return true;
            }
        }
        //Если не найдено - возвращаем false.
        return false;
    }
    //Поиск элемента.
    _Val find(const _Key& one)
    {
        //Если пустой кидаем искл.
        if(sz == 0)
            Empty_Error();
        //Ищем по ключу - если нашли возвращаем значение.
        for(size_t i=0; i<sz; ++i)
            if(Array[i].first == one)
                return Array[i].second;
        //Если не нашли возвращаем пустую строку.
        return _Val();
    }
    //Оператор доступа.
    _Val& operator [](const _Key& one)
    {
        //Если есть ключ вертаем значение.
        for(size_t i=0; i<sz; ++i)
            if(Array[i].first == one)
                return Array[i].second;
        //Если нет - создаем пару ключ - значение,
        //где значение устанавливается конструктором по умолчанию для типа
        //в нашем случае "".
        insert(std::make_pair(one, _Val()));
        //Вертаем значение.
        return Array[sz-1].second;
    }
    //Доступ к размеру массива.
    size_t size() const
    {
        return sz;
    }
    //Вывод на экран.
    void print()
    {
        for(size_t i=0; i<sz; ++i)
            std::cout<<Array[i].first<<' '<<Array[i].second<<'\n';
    }
    //Пустой-ли массив, проверяем просто проверяя размер на равенство нулю.
    bool empty()
    {
        return sz == 0;
    }
private:
    //Сам массив.
    _Ty* Array;
    //Размер.
    size_t sz;
    //Функция ошибки.
    void Empty_Error()
    {
        //Если работаем в DEBUG режиме - кидаем дебаг ошибку.
#if _DEBUG
        {
            std::_DEBUG_ERROR("Array is empty");
        }
        //Если релиз - кидаем исключение.
#else
        throw std::runtime_error("Array is empty");
        //Каждый #if, #ifdef, #ifndef 
        //должен иметь парный #endif
#endif
    }
};
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
23.03.2011, 09:20  [ТС]     Ассоц. массив #3
больно здоровый код для моего задания
не должно быть все так сложно
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 11:45     Ассоц. массив #4
Удали все "лишние" операторы и всё.)
А мне из Loki ассоциативный массив нравится.
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
23.03.2011, 11:46  [ТС]     Ассоц. массив #5
там много-много лишнего)
сбацайте простенькую реализацию)
и что значит массив из Loki?)
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 11:51     Ассоц. массив #6
и что значит массив из Loki?)
http://ru.wikipedia.org/wiki/Loki
Yandex
Объявления
23.03.2011, 11:51     Ассоц. массив
Ответ Создать тему
Опции темы

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