Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 2 / 1
Регистрация: 09.02.2011
Сообщений: 49

Ассоц. массив

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

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

Пример:
AssocArray var(20);
var["First"]= 5;
printf("%d",var["First"]);//должно напечатать 5
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.03.2011, 19:51
Ответы с готовыми решениями:

Ассоц. и послед. контейнеры. Разница в методах и алгоритмах.
Добрый вечер всем! Возник вопрос - прошу помощи. Речь об STL... В чем проблема собственно: почему для использования у множества с...

Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y
Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y. ...

Массив: Объединить заданные массивы в один массив, включив второй массив между k-м и (k+1)-м элементами первого
Заданы два одномерных массива с различным количеством элементов и натуральное число k. Объединить их в один массив, включив второй массив...

5
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
23.03.2011, 03:01
Лови. Писал по заказу - осталось. На базе массива пар.

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
    }
};
1
2 / 2 / 1
Регистрация: 09.02.2011
Сообщений: 49
23.03.2011, 09:20  [ТС]
больно здоровый код для моего задания
не должно быть все так сложно
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 11:45
Удали все "лишние" операторы и всё.)
А мне из Loki ассоциативный массив нравится.
0
2 / 2 / 1
Регистрация: 09.02.2011
Сообщений: 49
23.03.2011, 11:46  [ТС]
там много-много лишнего)
сбацайте простенькую реализацию)
и что значит массив из Loki?)
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 11:51
и что значит массив из Loki?)
http://ru.wikipedia.org/wiki/Loki
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2011, 11:51
Помогаю со студенческими работами здесь

Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C
Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C.

Сформировать массив, который будет состоять из чисел, входящих как в массив A, так и в массив B
Задание: На основе исходных массивов A и B (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел,...

Дан массив целых чисел а(12). Переписать в массив х четные, а в массив у нечетные элементы массива а
Помогите пожалуйста решить эту задачу. Массив a выводит на печать. Я пишу a mod 2 = 0 , а он мне 41 ошибку выдает. Что делать? Вот...

Массив: Преобразовать массив, прибавив к четным числам, входящим в массив, значение первого элемента.
Есть задача С клавиатуры вводятся элементы целочисленного массива размера N. Преобразовать его, прибавив к четным числам, входящим в...

Задан массив. Составить алгоритм и программу, которая выводит исходный массив и массив, полученный в результате выполнен
Задан массив. Составить алгоритм и программу, которая выводит исходный массив и массив, полученный в результате выполнения требований...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru