Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
32 / 32 / 28
Регистрация: 19.09.2013
Сообщений: 370

Ассоциативный массив

17.08.2015, 08:45. Показов 2159. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь написать что-то вроде ассоциативного массива, но проверка показывает, что не всё правильно добавляется (метод Add).
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
void Init(int);
void Add(int,int);
int Find(int);
int GetMin();
int GetMax();
void Remove(int);
 
int Array[1][2];
int Count=0;
int Max=1;
 
void Init(int max) {
    Count = 0;
    Max = max;
    Array[Max][2];
    for (int i=0; i< Max;i++) Array[i][0] = Array[i][1] = 0;
}
 
void Add(int key, int value) {
    if (Count >= Max) return;
    Array[Count][0] = key;
    Array[Count][1] = value;
    Count++;
}
 
int Find(int key) {
    for (int i=0; i<Max; i++) {
        if (Array[i][0]==key) return Array[i][1];
    }
    return 0;
}
 
int GetMin() {
    return Array[0][1];
}
 
int GetMax() {
    return Array[Count][1];
}
 
void Remove(int key) {
    bool check = false;
    for (int i=0; i<Max; i++) {
        if (Array[i][0]==key) {
            check = true;
            if (i == Max) Count--;
        }
        if (check) {
            Array[i][0] = Array[i+1][0];
            Array[i][1] = Array[i+1][1];
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.08.2015, 08:45
Ответы с готовыми решениями:

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

Ассоциативный массив
Доброго времени суток! Столкнулся с таким вопросом: к какому элементу ассоциативного массива осуществляется более быстрый доступ: к первому...

Ассоциативный массив
Простите за нубский вопрос, но гугл мне не помог( Нужно реализовать список радиочастот и названий радио. Получается нужен...

6
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
17.08.2015, 10:08
Цитата Сообщение от Eugene13 Посмотреть сообщение
int Array[1][2];
Какой смысл в массиве, у которого первый индекс может принимать только одно значение - ноль.
Может Вы хотели создать динамически меняющийся массив?

Туда же
Цитата Сообщение от Eugene13 Посмотреть сообщение
Array[Max][2];
Array[1][2] не существует, и в чем вообще смысл такого оператора.

В целом - все не так. Посмотрите ссылки внизу этой страницы.
1
bmstu-team
 Аватар для antonboom
301 / 136 / 91
Регистрация: 10.01.2012
Сообщений: 420
Записей в блоге: 10
17.08.2015, 10:33
Вот набросал хэш, только обернутый в класс.
Не совсем понятны ваши вариации с max и вообще, что это? Максимальное значение? Или значение последнего элемента в ассоц. массиве?
В общем вот, дописать остальные процедуры, я думаю, не составит труда

Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
/* Ассоц. массив вида
    Ключ    Значение
    Число - Число
    Число - Число 
    Число - Число
    ...
*/
const int size = 10;
 
class Hash{
    int **Array, count;
 
    public:
        Hash(){
            Array = new int*[size];  // 10 строк
            for (int i = 0; i < size; i++) 
                Array[i] = new int[2]; // 2 столбца
 
            count = 0;
        }
 
        bool Add(int key, int value){
            bool new_key = true;
            if(count == 0){         // если элемент первый - просто добавляем   
                Array[count][0] = key;
                Array[count][1] = value;
                count++;
            } else { // иначе сначала проверяем, есть ли уже такой
                for(int i = 0; (i < count) && new_key; i++)
                    if(Array[i][0] == key) new_key = false;                 
                if(new_key) {                       
                    Array[count][0] = key;
                    Array[count][1] = value;    
                    count++;
                }
            }
            return new_key;
        }
 
        bool Remove(int key){
            bool exist_key = false;
            for(int i = 0; (i < count) && !exist_key; i++)
                if(Array[i][0] == key){
                    exist_key = true;
                    for(int j = i; j < count - 1; j++){
                        Array[j][0] = Array[j + 1][0];
                        Array[j][1] = Array[j + 1][1];
                    }
                    count--;
                }
            
            return exist_key;
        }
 
        void Print(){
            for(int i = 0; i < count; i++)
                cout << Array[i][0] << " - " << Array[i][1] << endl;
        }
};
 
void main(){
    Hash H;
 
    for(int i = -1; i < 3; i++)
        if(H.Add(i, i*2)) cout << "Item successfully added" << endl;
 
    H.Print();
    
    for(int i = -1; i < 3; i++)
        if(H.Remove(i*2)) cout << "Item successfully deleted" << endl;
 
    H.Print();
 
    system("pause");
}
1
32 / 32 / 28
Регистрация: 19.09.2013
Сообщений: 370
17.08.2015, 11:12  [ТС]
zss, не получается у меня работать с многомерными массивами. Что касается
C++
1
int Array[1][2];
то оставить его безразмерным не позволял интерпретатор, а потом в методе Init всё равно нормальная размерность задаётся.
antonboom, спасибо, посмотрю. Max - размер массива.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
17.08.2015, 11:26
Размер статического массива менять нельзя!!!!!!!!!!!
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.08.2015, 11:30
Лучший ответ Сообщение было отмечено Eugene13 как решение

Решение

Цитата Сообщение от Eugene13 Посмотреть сообщение
void Add(int key, int value) {
* * if (Count >= Max) return;
* * Array[Count][0] = key;
* * Array[Count][1] = value;
* * Count++;
}
int Find(int key) {
* * for (int i=0; i<Max; i++) {
* * * * if (Array[i][0]==key) return Array[i][1];
* * }
* * return 0;
}
судя по логике функции Find,
логика функции Add в корне не верна.
ключ должен быть в первой размерности.

зы: это не ассоциативный массив, а тихий ужас.
2
32 / 32 / 28
Регистрация: 19.09.2013
Сообщений: 370
17.08.2015, 12:02  [ТС]
hoggy, пытаюсь учиться на своих ошибках) Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.08.2015, 12:02
Помогаю со студенческими работами здесь

Ассоциативный массив
Добрый день. Нужно заполнить map &lt;char,vector&lt;int&gt; &gt; из файла, содержание которого: 1 f 2 g 5 c Вот моя программа #include...

Ассоциативный массив
Добрый день. Есть массив map&lt;char,vector&lt;bool&gt; &gt; table; Как пройтись по этому массиву итератором, чтобы вывести содержимое на экран? ...

Ассоциативный массив
Задача будет такая: с платы (AFDX) считываются данные в таком формате: индекс 9 байт и сами данные 1500байт. &quot;Индекс&quot; на самом...

динамический ассоциативный массив
Подскажите как организовать ассоциативный массив в виде динамической структуры для класса template &lt;class T&gt; class el ...

Ассоциативный массив на префиксных деревьях
Подскажите, существует ли контейнер или готовый класс, типа map, но основанный на префиксных деревьях? Нужно для быстрого поиска ключа. Я...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru