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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.65
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 467
#1

map - заполнение и удаление - C++

29.10.2013, 10:40. Просмотров 3901. Ответов 43
Метки нет (Все метки)

Хочу проинициализировать map случайными числами и вывести на экран.
Скажите, в чем ошибка?

Объявление:
C++
1
2
std::map <int, int> myMap;
std::map <int, int> :: iterator it = myMap.begin();
Инициализация случайными числами (подчеркивает красным "="):
C++
1
2
while (it != myMap.end())
    myMap.begin() = generateRandomNumber();
Вывод на экран (подчеркивает красным "["):
C++
1
2
for (myMap.begin(); it != myMap.end(); it++)
    std::cout << myMap[it] << " ";
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2013, 10:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос map - заполнение и удаление (C++):

Заполнение map - C++
Будьте добры, подскажите. Из базы данных считываютя данные (строка и несколько значений). Необходимо поместить их в map для возможности...

Заполнение map из файла - C++
Народ помогите, как заполнить контейнер map из файла? Файл представлен данными по типу: 5671234 Ivanov 3214567 Petrov 9871234...

Map: заполнение, поиск - C++
Первый раз работаю с map. Нужно заполнить с клавиатуры циклом вот такой мап: map &lt;pair &lt;int, int&gt;, int&gt; myMap; Как это можно сделать? И...

Заполнение map объектами класса - C++
Здравствуйте! Нашел пример заполнения map таким образом: map&lt;string, int&gt; M; M = 1; Но при заполнении map аналогичным образом...

Чтение из файла и заполнение контейнера map - C++
Есть такое задание: дан файл,в котором записаны имена студентов.Напротив каждого имени - их оценки.Нужно считать из файла это всё в...

Заполнение map символами и количеством их встреч в файле - C++
#include &lt;iostream&gt; #include &lt;map&gt; #include &lt;fstream&gt; #include &lt;vector&gt; using namespace std; int main(){ map&lt;char,int&gt;result; ...

43
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,533
Завершенные тесты: 1
29.10.2013, 10:49 #2
Цитата Сообщение от dimakozyr Посмотреть сообщение
Инициализация случайными числами (подчеркивает красным "="):
Вы поступаете аналогично вот такому:
C++
1
2
int foo(){return 7;}
foo() = 9;
Цитата Сообщение от dimakozyr Посмотреть сообщение
Вывод на экран (подчеркивает красным "["):
C++
1
2
for (myMap.begin(); it != myMap.end(); it++)
    std::cout << *it << " ";
1
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.10.2013, 10:52 #3
dimakozyr, Ну... Эм. А посмотреть что такое map?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <map>
#include <cstdlib>
#include <ctime>
 
int main()
{
   const size_t iterations = 10;
   srand(time(0));
   std::map<int, int> values;
   for (size_t i = 0; i < iterations; ++i)
   {
      values.insert(std::make_pair(rand() % 100, rand() % 100));
   }
   for (std::map<int, int>::iterator pos = values.begin(); pos != values.end(); ++pos)
   {
      std::cout << "key: " << pos->first << " value: " << pos->second << std::endl;
   }
}
Добавлено через 1 минуту
SatanaXIII, Неверный ответ. Плюс к тому у pair нету оператора вывода.
1
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 467
29.10.2013, 11:04  [ТС] #4
А как можно удалять элементы из map?
Искал, но везде лишь обрывки кода, не очень понятно
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,533
Завершенные тесты: 1
29.10.2013, 11:11 #5
Цитата Сообщение от ForEveR Посмотреть сообщение
Неверный ответ.
Да. Мой косяк.
Цитата Сообщение от ForEveR Посмотреть сообщение
Плюс к тому у pair нету оператора вывода.
А можно поподробнее? А то, с вашего позволения:
C++
1
2
3
4
5
6
7
8
   /*for (std::map<int, int>::iterator pos = values.begin(); pos != values.end(); ++pos)
   {
      std::cout << "key: " << pos->first << " value: " << pos->second << std::endl;
   }*/
 
   std::map<int, int>::iterator it = values.begin();
   for (values.begin(); it != values.end(); it++)
    std::cout << it->first << " ";
1
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.10.2013, 11:23 #6
SatanaXIII, Данный вывод выведет ключи мапы. Если же попытаться вывести *it будет ошибка.
dimakozyr, erase очевидным образом.
1
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,533
Завершенные тесты: 1
29.10.2013, 11:55 #7
Цитата Сообщение от ForEveR Посмотреть сообщение
Если же попытаться вывести *it будет ошибка.
Да.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Мой косяк.
0
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 467
29.10.2013, 12:17  [ТС] #8
Нужно пройтись по вектору и по map и удалить их обоих все неповторяющиеся элементы,
т.е. оставить дубликаты. Не очень понимаю, как это сделать
C++
1
2
3
4
5
6
7
8
// Обход вектора
for (int i = 0; i < sizeOfContainer; i++)
        // Обход map
    for (std::map<int, int>::iterator pos = myMap.begin(); pos != myMap.end(); ++pos)
        if (myVector[i] != myMap[i]) {
            myVector.pop_back();
            myMap.erase(i);
        }
0
MrGluck
Модератор
Эксперт CЭксперт С++
7419 / 4534 / 673
Регистрация: 29.11.2010
Сообщений: 12,308
29.10.2013, 12:32 #9
Цитата Сообщение от SatanaXIII Посмотреть сообщение
for (myMap.begin(); it != myMap.end(); it++)
косяк №2
Предпочитайте префиксную запись постфиксной, не создаются лишние объекты, для итераторов это существенно.

Не по теме:

И не надо мне про оптимизацию рассказывать, глупо надеяться на машину



Добавлено через 5 минут
Цитата Сообщение от dimakozyr Посмотреть сообщение
удалить их обоих все неповторяющиеся элементы
именно vector и map? Т.е. если не найден ключ, равный элементу вектора, то удалить его из вектора, аналагично для map? Просто не ясно, для чего тогда пары в map нужны?

Есть полный текст задания?
0
XRuZzz
Антикодер
681 / 583 / 29
Регистрация: 15.09.2012
Сообщений: 2,531
29.10.2013, 12:38 #10
Цитата Сообщение от ForEveR Посмотреть сообщение
C++
1
2
3
4
for (size_t i = 0; i < iterations; ++i)
{
   values.insert(std::make_pair(rand() % 100, rand() % 100));
}
помоему так будет лучше
(я про тот случай когда ключи от 0 до 10 должны быть все использованы)
C++
1
2
3
4
for (size_t i = 0; i < 10; ++i)
{
   values[i] = rand() % 100;
}
надо же каким то образом исключать случайные ключи, куда вы уже записали
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,533
Завершенные тесты: 1
29.10.2013, 12:39 #11
Цитата Сообщение от MrGluck Посмотреть сообщение
косяк
Не соглашусь.
Цитата Сообщение от MrGluck Посмотреть сообщение
не создаются лишние объекты
С точки зрения миркооптимизации да.
1
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 467
29.10.2013, 12:41  [ТС] #12
Цитата Сообщение от MrGluck Посмотреть сообщение
Есть полный текст задания?
Да, вот он:
1.заполнить случайными числами от 1 до 9 значения контейнеров vector[i] и map[i];
2.удалить случайное число элементов (не более 15) в каждом контейнере;
3.после этого провести синхронизацию, чтобы в vector и map остались только имеющиеся в обоих контейнерах элементы (дубликаты не удалять).
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.10.2013, 12:42 #13
XRuZzz, Они так и так будут исключены. insert не вставит более одного элемента с одним ключом.
1
XRuZzz
Антикодер
681 / 583 / 29
Регистрация: 15.09.2012
Сообщений: 2,531
29.10.2013, 12:44 #14
Цитата Сообщение от ForEveR Посмотреть сообщение
XRuZzz, Они так и так будут исключены. insert не вставит более одного элемента с одним ключом.
вы же ожидаете создать 10 пар, а вместо этого создадите 10 - (количество снова выпавших чисел)
1
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.10.2013, 12:46 #15
XRuZzz, Код с [] аналогично так-то, единственное что - значение при повторе будет изменено. Проверить это естественно запросто.
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
#include <iostream>
#include <map>
#include <cstdlib>
#include <ctime>
 
int main()
{
   const size_t iterations = 10;
   srand(time(0));
   std::map<int, int> values;
   for (size_t i = 0; i < iterations; ++i)
   {
      auto pos = values.insert(std::make_pair(rand() % 10, rand() % 10));
      if (!pos.second)
      {
         std::cout << "duplicate: " << pos.first->first << std::endl;
         --i;
      }
   }
   for (std::map<int, int>::iterator pos = values.begin(); pos != values.end(); ++pos)
   {
      std::cout << "key: " << pos->first << " value: " << pos->second << std::endl;
   }
}
1
29.10.2013, 12:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2013, 12:46
Привет! Вот еще темы с ответами:

Заполнение контейнера map из файла без цикла - C++
В общем, вопрос следущий. Интересует, возможно ли инициализировать контейнер map, данными из файла, без использования циклов. Например,...

Обращение к элементам vector, который находится в map, находящийся в map - C++
Всем добрый день! Имеется такой контейнер. Как обращаться к элементам вектора и как пушбэчить его? map &lt;int,map&lt;int,vector&lt;int&gt; &gt;...

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? - C++
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Как вставить элемент и вывести элементы на экран в map<string, map<string,int>> ? - C++
У меня есть map&lt;string, map&lt;string,int&gt;&gt;, в него надо добавить элементы (типа Ivanov potato 200) Использовать именно map&lt;string,...


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

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

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