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

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

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

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

22.03.2011, 19:51. Просмотров 483. Ответов 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++
Добрый вечер всем! Возник вопрос - прошу помощи. Речь об STL... В чем проблема собственно: почему для использования у множества с...

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

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

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

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

Массив: Отсортировать полученный массив 3 способами: по строкам, по столбцам( возр.), 3) и весь массив - Delphi
Помогите, пожалуйста ,решить задачу. Очень нужно. Задан массив (4*6). Элементы задаются по правилу: если j>3, то Aij=i+j, иначе...

Массив: Как сделать так, чтобы результирующий массив представлял собой измененный по заданным правилам первый массив? - C++ Builder
Доброй ночи форумчане, очередной нубо-вопрос не требует отлагательств имеется одномерный массив, из которого по заданным условиям...

Массив. Разделить на два: массив элементов с четными и массив с нечетными индексами - Pascal ABC
VII.Одномерные массивы 50. Задан массив с количеством элементов N. Сформировать два массива: в первый включить элементы исходного массива...

Построить массив d из элементов, которые входят как в массив a так и в массив b - C (СИ)
Дан массив a и b состоящий из n элементов. Построить массив d из элементов, которые входят как в массив a так и в массив b. Желательно с...

Вывести массив а(i, j), одномерный массив b(i) и полученный массив АВ с помощью функции Cells - VBA
Задача 1 Написать программу для решения следующей задачи: для числа n вводимого с клавиатуры (с помощью функции InputBox())...

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать - C++
Добрый Вечер! Написал первую часть программы по этому заданию"Ввести массив А. В массив В перенести все элементы массива А, стоящие правее...

Двумерный массив.Дан массив 5 х 5. Определить сумму элементов тех строк, где диагональный элемент равен нулю и записать их в отдельный массив. - Turbo Pascal
помогите составить программу. во задание:Дан массив 5 х 5. Определить сумму элементов тех строк, где диагональный элемент равен нулю и...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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     Ассоц. массив
Ответ Создать тему
Опции темы

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