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

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

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

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

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

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

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

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

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

Массив: Как скопировать двумерный массив в другой массив? - C++
Как скопировать двумерный массив в другой массив?

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

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

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

5
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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
    }
};
1
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
23.03.2011, 09:20  [ТС] #3
больно здоровый код для моего задания
не должно быть все так сложно
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 11:45 #4
Удали все "лишние" операторы и всё.)
А мне из Loki ассоциативный массив нравится.
0
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
23.03.2011, 11:46  [ТС] #5
там много-много лишнего)
сбацайте простенькую реализацию)
и что значит массив из Loki?)
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 11:51 #6
и что значит массив из Loki?)
http://ru.wikipedia.org/wiki/Loki
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2011, 11:51
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
23.03.2011, 11:51
Ответ Создать тему
Опции темы

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