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

C++

Войти
Регистрация
Восстановить пароль
 
IROKEZ
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 19
#1

Двунаправленный ассоциативный контейнер для хранения структур - C++

16.12.2010, 18:47. Просмотров 946. Ответов 2
Метки нет (Все метки)

12. Двунаправленный ассоциативный контейнер.

Цель: разработать программу, реализующую функционал телефонной книги.

Задачи:
12.1 Разработать структуру данных для хранения информации и контейнер для хранения структур данных.
12.2 На основе контейнера реализовать следующие операции:
- добавление абонента;
- удаление абонента;
- изменение информации об абоненте;
- поиск телефонного номера по имени абонента;
- поиск имени абонента по телефонному номеру.
12.3 Создать пользовательский интерфейс, позволяющий осуществлять поиск, отображение и редактирование данных об абоненте. Создать помощники (wizard) для добавления/удаления абонента.

Собственно интересует только первый пункт, т.к. остальное могу реализовать сам. Что такое двунаправленный ассоциативный контейнер я знаю. проблема состоит в том, что я не знаю как его правильно реализовать программно. У меня есть 2 варианта решения задачи: первый - через один массив, второй - через 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
#include <iostream>
#include <assert.h>
using namespace std;
 
class Massive
{
public:
    Massive();
    ~Massive();
    void getElement(int N);
    void setElement(char *NAME, int num, int N);
    void setSize(int N);
    void getSize(int &N);
private:
    struct PhoneBook {
        char *name;
        int number;
    } *PhoneBookTab;
    int N;
};
 
Massive::Massive()
{
    N=0;
    PhoneBookTab=NULL;
}
 
Massive::~Massive()
{
    for(int i=0; i<N; i++)
        delete []PhoneBookTab;
}
 
void Massive::getElement(int n) // Функцию вывода элементов пока не писал
{
 
}
 
void Massive::setElement(char *NAME, int num, int n)
{
    assert(n>=0 && n<=N);
    PhoneBookTab[n].name=NAME;
    PhoneBookTab[n].number=num;
}
 
void Massive::setSize(int lenght)
{
    assert(lenght>=0);
    for(int i=0; i<N; i++)
        delete[] PhoneBookTab;
    PhoneBook *PhoneBookTab = new PhoneBook[lenght];
    N=lenght;
}
 
void Massive::getSize(int &lenght)
{
    N=lenght;
}
 
int main()
{
    Massive tab;
    int n, num;
    char *NAME;
 
    cout<<"Input number: ";
    cin>>n;
 
    tab.setSize(n);
    for(int i=0; i<n; i++)
    {
        cout << "Input name of abonent: ";
        cin >> NAME;
        cout << "Input tel number: ";
        cin >> num;
        tab.setElement(NAME, num, i);
    }
 
    return 0; 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2010, 18:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двунаправленный ассоциативный контейнер для хранения структур (C++):

Builder 6. DLL, как контейнер для изображений - C++ Builder
Вот в этой статье все замечательно расписано про DLL как контейнер для изображений. Возможно глупый вопрос, но в С++ Builder 6 этот процесс...

Использование dll как контейнер для файлов в builder 6 - C++ Builder
Пишу игру. Нужно спрятать BMPшные картинки в dll и прямо оттуда их загружать в Image. Как это реализовать именно в 6'ом builder'е?

Тип char для хранения байтов - C++ Builder
Записываю в переменную типа char &quot;78 DA F3 CD 4C 2E 02 00 03 AB 01 8C&quot;, в итоге в ней оказывается только &quot;78 DA F3 CD 4C 2E 02 00&quot;. Похоже,...

Необходимо создать массив для хранения адресов функций - C++ Builder
Необходимо создать массив для хранения адресов функций static TObject fun = {CheckBoxClick}; так не работает, где CheckBoxClick - это ...

gdi+ и конейнер для хранения изображений - C++ WinAPI
Хочу реализовать средствами winapi и gdi+ следующий функционал: 1. считывается изображение с диска любого формата, поддерживаемого gdi+ ...

Подскажите контейнер для хранения данных - C++
Доброе время суток, имеем файл следующего содержания: # | Name | Type | Target 1 test txt toLSS 2 test2 avi ...

2
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
16.12.2010, 22:55 #2
Есть подозрение, что это двусвязный список.
0
IROKEZ
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 19
16.12.2010, 23:03  [ТС] #3
Цитата Сообщение от lemegeton Посмотреть сообщение
Есть подозрение, что это двусвязный список.
Ошибочное подозрение.
Это должно быть что-то вроде std::map (по смыслу, а не по реализации), но с возможностью поиска и по ключу и по значению. Для того чтобы реализовать такое нужно использовать 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
#include <iostream>
#include <assert.h>
using namespace std;
 
class Massive
{
public:
    Massive();
    ~Massive();
    void getElement(int N);
    void setElement(char *NAME, int num, int N);
    void setSize(int N);
    void getSize(int &N);
private:
    struct PhoneBook {
        char *name;
        int number;
    } *PhoneBookTab;
    int N;
};
 
Massive::Massive()
{
    N=0;
    PhoneBookTab=NULL;
}
 
Massive::~Massive()
{
    delete []PhoneBookTab;
}
 
void Massive::getElement(int n)
{
    assert(n>=0 && n<=N);
    cout
            << PhoneBookTab[n].name << "\n"
            << PhoneBookTab[n].number << endl << "\n";
 
    //return PhoneBookTab[n];
}
 
void Massive::setElement(char *NAME, int num, int n)
{
    assert(n>=0 && n<=N);
    PhoneBookTab[n].name=NAME;
    PhoneBookTab[n].number=num;
}
 
void Massive::setSize(int lenght)
{
    assert(lenght>=0);
    delete[] PhoneBookTab;
    PhoneBookTab = new PhoneBook[lenght];
 
    N=lenght;
}
 
void Massive::getSize(int &lenght)
{
    lenght=N;
}
 
int main()
{
    Massive tab;
    int n, num;
    char NAME[100];
 
    cout<<"Input number: ";
    cin>>n;
 
    tab.setSize(n);
    for(int i=0; i<n; i++)
    {
        cout << "Input name of abonent: ";
        cin >> NAME;
        cout << "Input tel number: ";
        cin >> num;
        tab.setElement(NAME, num, i);
    }
 
    for(int i=0; i<n; i++)
        tab.getElement(i);
 
 
    return 0; 
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2010, 23:03
Привет! Вот еще темы с ответами:

Разработать шаблон класса для хранения данных (контейнер) - C++
Я не понял как описать шаблон класса для хранения данных (контейнер). Данные должны хранится, например, в виде массива. Шаблон должен...

Организовать двунаправленный список для хранения элементов структуры, содержащей сведения о фамилии, дате рождения - C++
Организовать двунаправленный список для хранения элементов структуры, содержащей сведения о фамилии, дате рождения. Предусмотреть...

Ассоциативный контейнер и шаблонный класс - C++
Помогите пожалуйста исправить и дополнить код. Задание: Автоматизированная информационная система на железнодорожном вокзале содержит...

Ассоциативный контейнер типа map - C++
Привет! Помогите пожалуйста найти ошибку. Программа с Ассоциативным контейнером типа map&lt;string, int&gt;. Прога подсчитывает колличество...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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