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

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

Войти
Регистрация
Восстановить пароль
 
daert
1 / 1 / 2
Регистрация: 09.05.2014
Сообщений: 47
#1

Контейнер map - C++

10.05.2014, 10:33. Просмотров 668. Ответов 4
Метки нет (Все метки)

в программе используется ассоциативный массив, идентификатором которого являются символы
проблема в том что появляется элемент с идентификатором символом -51 'Н', и неважно был ли он задан или нет, как я понимаю это происходит при созданиии массива, массив создаётся с 1-м элементом с каким то идентификатором ('Н') и какимито данными (которые берёт из памяти), но при работе программы из-за этого возникает ошибка: если данный символ неиспользуется в тексте то работаем с лишним элементом, что бы это исправить поставил условие чтобы идентификатор не был равен данному символу, если же символ используется то теряем 1 элемент массива
Помогите решить данную проблему. сам я вижу только 2 пути решения: 1-е удалить этот элемент (как? сам с контейнерами практически не знаком) или сменить идентификатор (незнаю возможно это или нет)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2014, 10:33     Контейнер map
Посмотрите здесь:

Контейнер map - C++
Cоздать ассоциативный список имен (ключей), телефонов. Осуществить поиск по именам. Дополнить его данным адрес. Добавить возможности...

Контейнер map ? - C++
Не совсем удается разобраться Не удается разобраться с ассоциативными контейнерами ! Как выглядит объявление функции в псевдокоде? Что...

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

Контейнер map - C++
Здравствуйте, работаю с контейнером map, анализирую текст, получаю записи типа "слово: число его появлений в тексте". Хотелось бы вывести...

Контейнер map - C++
Стоит задача реализовать контейнер map. Вопрос возникает при реализации итератора для этого контейнера. В итераторе должны быть реализованы...

Map контейнер сортировка - C++
Добрый день. Собственно необходимо вывести отсортированный мап контейнер по числу гласных в слове. Вводить строку и выводить мап...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Santiii
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 9
10.05.2014, 11:04     Контейнер map #2
Можно сам код программы?
На сколько знаю, инициализация ассоциативного массива проходит без каких-либо элементов, т.е. первоначально он пуст. Для удаления элемента есть метод erase
daert
1 / 1 / 2
Регистрация: 09.05.2014
Сообщений: 47
10.05.2014, 11:52  [ТС]     Контейнер map #3
вот куски кода (надеюсь хватит), описанная ошибка происходит в функции print строка 27 без условия
C++
1
&&(int)(root->c)!=-51
не выполняется никогда, хотя символа 'Н' в тексте нет (программа реализует метод хаффмана через бинарное дерево, Node узел дерева, на ниждем уровне каждый узле имеет свой идентификатор и вес, на остальных уровнях у узла есть адреса двух нижестоящих узлов из которых он состоит и его вес)
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
class Node
{
    public:
     int a;
     char c;
     Node *left, *right;
     
     Node(){left=right=NULL;}
 
     Node(Node *L, Node *R) //конструктор принимающий 2 ссылки на левый и правый узлы нижестоящего уровня дерева
     {  left =  L;// указатель на левый узел предыдущего уровня входящий в узел текущего уровня
        right = R;
        a = L->a + R->a;  // записываем в узел текущего уровня вес узлов входящих в него с предыдущего уровня
     }
};
...
void print (Node* root, unsigned k=0)
{
    if(root!=NULL)
    {
        print(root->left,k+3);//рекурсивно продвигаемся от корня к вершинам (от единственного узла верхнего уровня до узлов нижнего уровня), 
                            //к-отступ для вывода на экран
        for(unsigned i=0; i<k;i++) 
            cout<<"  ";
 
        if(root->c&&(int)(root->c)!=-51) cout<<root->a<<" ("<<root->c<<")"<<endl;// если у текущего узла есть буква (буквы принадлежат лиш верхним узлам дерева)выводим её вес и символ 
        else cout<<root->a<<endl; // выводим вес узла если ему не принадлежит буква
        print(root->right,k+3);
    }
}
 
...
 
void main()
{
...
while (t.size()!=1)// пока в списке не останется 1 элемент(узел) выполнять
          {  
             t.sort(MyCompare());// сортирую список узлов дерева по частоте встречаемости символа от наименьшей к наибольшей, MyCompare() - условие сортировки
    
             Node *SonL = t.front();// создаём указатель на 1-й узел (т.е. на узел с наименьшей частотой встречаемости)
             t.pop_front();// удаляем взятый узел
             Node *SonR = t.front(); // создаём указатель на 1-й узел (2-й до удаления 1-го узла)  
                                //(т.е. на узел с наименьшей частотой встречаемости в списке из которго был удалён 1-й элемент)
             t.pop_front();// удаляем взятый узел
     
             Node *parent = new Node(SonL,SonR); // создаём узел следующего уровня из 2-х узлов текущего уровня
             t.push_back(parent);// добавляем созданный узел в список (дерево)
          }
}
Добавлено через 5 минут
программа нормально работает в monodevelop external console
но мне нужно в visual studio 2010

Добавлено через 2 минуты
и такой ещё вопрос: как проверить существует ли в ассоциативном массив элемент с заданным идентификатором?
Santiii
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 9
10.05.2014, 12:10     Контейнер map #4
метод map::find возвращает итератор на элемент, если он есть в контейнере, иначе возвращает итератор на map::end
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2014, 14:47     Контейнер map
Еще ссылки по теме:

Перевернуть контейнер map? - C++
Здравствуйте. Нужно отсортировать map по убыванию. Сделать что-то вроде прохода от map.end() до map.begin Спасибо.

Контейнер map<int, some*> - C++
доброго времени суток. Никак не могу разобраться с проблемой. суть такая. Хочу в классе создать статический контейнер с адресами...

Контейнер map содержащий векторы - C++
Доброго времени суток уважаемые! Подскажите пожалуйста можно ли организовать map&lt;vector, vector&gt; и правильно ли так поступать? Возможно...

Контейнер map, с двумя ключами? - C++
Добрый день всем! Всех с наступающим! Интересует такой вопрос , имеется ли в STL или Boost, контейнер аналогичный map, только с двумя...

Чтение из файла в контейнер map - C++
Вот есть структура struct Kino { int numb ; //номер кинотеатра string name; //название ктра vector&lt;string&gt; sv; //список...

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


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

Или воспользуйтесь поиском по форуму:
AntonGlebov
0 / 0 / 0
Регистрация: 29.12.2012
Сообщений: 13
05.06.2014, 14:47     Контейнер map #5
В входном файл, с которого считываете текст, поменяйте кодировку с ANSI на UTF-8 или другую.
Yandex
Объявления
05.06.2014, 14:47     Контейнер map
Ответ Создать тему
Опции темы

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