Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/55: Рейтинг темы: голосов - 55, средняя оценка - 4.82
 Аватар для dimakozyr
383 / 30 / 3
Регистрация: 17.08.2013
Сообщений: 560

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

29.10.2013, 10:40. Показов 11939. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.10.2013, 10:40
Ответы с готовыми решениями:

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

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

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

43
Антикодер
Эксперт функциональных языков программирования
1889 / 871 / 48
Регистрация: 15.09.2012
Сообщений: 3,092
29.10.2013, 13:23
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от dimakozyr Посмотреть сообщение
Спасибо, просто, в STL еще не силен, а задачу решать нужно
В идеале в конце этой темы я ожидаю увидеть шаблон RandomContainers, написанный вами и протестированный.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.10.2013, 13:27
Как вариант +- как-то так

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
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <ctime>
 
int main()
{
   const size_t iterations = 10;
   const size_t max = 20;
   srand(time(0));
   std::map<int, int> values;
   std::vector<int> vec;
   for (size_t i = 0; i < iterations; ++i)
   {
      auto pos = values.insert(std::make_pair(rand() % max, rand() % max));
      if (!pos.second)
      {
         --i;
         continue;
      }
      vec.push_back(rand() % max);
   }
   std::cout << "map keys: ";
   std::for_each(values.begin(), values.end(), [](const std::pair<int, int>& p)
   {
      std::cout << p.first << " ";
   });
   std::cout << std::endl;
   std::cout << "vector: ";
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
   std::vector<int> original(vec);
   vec.erase(std::remove_if(vec.begin(), vec.end(), [&values](int v)
   {
      return values.find(v) == values.end();
   }), vec.end());
   for (std::map<int, int>::const_iterator pos = values.begin(); pos != values.end();)
   {
      if (std::find(original.begin(), original.end(), pos->first) == original.end())
      {
         pos = values.erase(pos);
      }
      else
      {
         ++pos;
      }
   }
   std::cout << "map keys: ";
   std::for_each(values.begin(), values.end(), [](const std::pair<int, int>& p)
   {
      std::cout << p.first << " ";
   });
   std::cout << std::endl;
   std::cout << "vector: ";
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
}
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
29.10.2013, 14:00
генерация без дубликатов:
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
#include <iostream>
#include <random>
#include <functional>
#include <vector>
#include <algorithm>
#include <iterator>
 
template <typename ForwardIterator, typename T>
bool notUnique(ForwardIterator first, ForwardIterator last, T val)
{
    ForwardIterator it = std::find(first, last, val);
    if (it != last)
    {
        return std::find(++it, last, val) != last;
    }
    return false;
}
 
template <typename ForwardIterator, typename Generator>
void generateUnique(ForwardIterator first, ForwardIterator last, Generator gen)
{
    for (ForwardIterator it = first; it != last; ++it)
    {
        do
        {
            *it = gen();
        } while (notUnique(first, last, *it));
    }
}
 
int main()
{
    const size_t N = 10;
    std::vector<int> v(N);
    std::mt19937 gen {std::random_device()() };
    std::uniform_int_distribution<int> uid(0, N);
    auto roll = std::bind(uid, gen);
 
    generateUnique(std::begin(v), std::end(v), roll);
    std::sort(v.begin(), v.end());
    std::copy(std::begin(v), std::end(v), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
}
Добавлено через 2 минуты
Цитата Сообщение от XRuZzz Посмотреть сообщение
bool generate(T values, size_t n)
а если работать с итераторами, не?
Да и весь массив копировать не есть гуд, хоть бы ссылку поставили.

Добавлено через 2 минуты
Кстати, у меня алгоритм в лоб. С мапом надо бы опираться на то, что ключи отсортированы, но я лишь подкинул идею.

Добавлено через 6 минут
Цитата Сообщение от SatanaXIII Посмотреть сообщение
С точки зрения миркооптимизации да.
ну да, ну да...
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
#include <iostream>
#include <random>
#include <functional>
#include <chrono>
#include <vector>
#include <cstddef>
 
using std::chrono::duration_cast;
using std::chrono::microseconds;
using std::chrono::steady_clock;
 
int main()
{
    const size_t N = 1000000;
    std::mt19937 gen {std::random_device()() };
    std::uniform_int_distribution<int> uid(0, N);
    auto roll = std::bind(uid, gen);
    steady_clock::time_point start, end;
 
    // part 1
    std::vector<int> v(N);
    start = steady_clock::now();
    for (auto it = v.begin(); it != v.end(); ++it)
        *it = roll();
    end = steady_clock::now();
    std::cout << "First: "
              << duration_cast<microseconds>(end - start).count() << std::endl;
 
    // part 2
    std::vector<int> v2(N);
    start = steady_clock::now();
    for (auto it = v2.begin(); it != v2.end(); it++)
        *it = roll();
    end = steady_clock::now();
    std::cout << "Second: "
              << duration_cast<microseconds>(end - start).count() << std::endl;
}
Сколько в дебаге даст разницы?
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
29.10.2013, 14:04
Цитата Сообщение от MrGluck Посмотреть сообщение
Сколько в дебаге даст разницы?
А в релизе?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.10.2013, 14:04
Цитата Сообщение от MrGluck Посмотреть сообщение
генерация без дубликатов:
В детали не погружался, но не разумнее ли сделать random_shuffle указанного диапазона вместо потенциального зацикливания в while?
0
29.10.2013, 14:05

Не по теме:

скока лишних "std::" ппц, в 2-х последних постах. Первый раз я промолчал, но щас уже немного напрягает.
Начиная с последнего поста MrGluck пора раздавать репутацию, жаль я только отзыв не могу сейчас оставить :)

Цитата Сообщение от MrGluck Посмотреть сообщение
а если работать с итераторами, не?
это всё в рамках пропаганды скобок [] :) а вообще я согласен с любой критикой в адрес этого куска кода.

0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
29.10.2013, 14:08
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А в релизе?
А про юнит тесты слышали?

Добавлено через 1 минуту
Tulosba, разумнее но не тут. Всегда раньше так делал, когда надо было с равным шагом числа получить. Тут же можно получить например случ. последовательность 1, 4, 5, 6, 7.
0
29.10.2013, 14:09

Не по теме:

XRuZzz, А чем std:: то не устраивает? Люди пишут как привыкли, если вы привыкли использовать using namespace std - флаг в руки.

0
29.10.2013, 14:13

Не по теме:

Цитата Сообщение от XRuZzz Посмотреть сообщение
скока лишних "std::" ппц
Нет желания спихивать все функции в одно пространство имен. Вдобавок, не всегда выходит ограничиваться стандартной либой, иногда нужно использовать другие. Если даже этого не делаете сейчас - приучайте себя к хорошему на потом.
Да и непонятных конфликтов меньше.

0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.10.2013, 14:17
Цитата Сообщение от MrGluck Посмотреть сообщение
Всегда раньше так делал, когда надо было с равным шагом числа получить. Тут же можно получить например случ. последовательность 1, 4, 5, 6, 7.
Не уловил идеи. Можно поподробнее?
0
29.10.2013, 14:19

Не по теме:

ясно,
я не использую using namespace std;
но "представлять идеи" всё таки лучше без лишних символов

1
29.10.2013, 14:20

Не по теме:

Цитата Сообщение от XRuZzz Посмотреть сообщение
но "представлять идеи" всё таки лучше без лишних символов
Идеи должны работать иногда :) Особенно, если они представлены в виде кода.

0
29.10.2013, 14:22

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Идеи должны работать иногда Особенно, если они представлены в виде кода.
вы понимаете, что вы спорите с примерами в книгах Страуструпа? :D

0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
29.10.2013, 14:24
Tulosba, ну так random_shuffle всего лишь перемешает арифмитическую последовательность. Можно конечно последов. генерить экзотическим способом, но тогда опять встанет вопрос в прослеживание дублей.
Все становится ясно, когда, например, надо получить 10 целых неповторяющихся чисел от 0 до 11. С рандом шафл это всего-лишь 2 варианта без изменения правила генерации последовательности, у меня же возможно получить 11.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от XRuZzz Посмотреть сообщение
вы понимаете, что вы спорите с примерами в книгах Страуструпа?
для клиентов на фрилансе делаю using namespace std;
Просто чтобы вопросов не было лишних.
А Страуструп сам писал, что using namespace std зло (инфа 90%, мб попутал с каким другим программистом)

0
29.10.2013, 14:34

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
для клиентов на фрилансе делаю using namespace std;
Просто чтобы вопросов не было лишних.
А Страуструп сам писал, что using namespace std зло (инфа 90%, мб попутал с каким другим программистом)
прям хочется вернуться в прошлое и написать более точно свою мысль:
"у меня есть пожелание читать код без std:: но если вам так удобнее пишите ради бога с std::"
надеюсь это может закончить холивар

0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
29.10.2013, 14:40
Цитата Сообщение от MrGluck Посмотреть сообщение
инфа 90%, мб попутал с каким другим программистом

Не по теме:

А нет, все же он.

0
29.10.2013, 14:41

Не по теме:

Цитата Сообщение от XRuZzz Посмотреть сообщение
у меня есть пожелание читать код без std::
Сейчас почти во всех IDE и текстовых редакторов есть возможность убрать "ненавистные символы". Это дело привычки, для меня вполне естественно видеть полное имя функции.
Холивара толком не было.

0
29.10.2013, 14:41

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
А нет, все же он.
я руководствовался этим же текстом :) то есть мы выкладываем в теме "примеры"

0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
29.10.2013, 15:33
Генерация СЧ в map таким образом, чтобы на выходе получился контейнер заданного размера. При повторе ключей старые значения не перезаписываются.
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
#include <iostream>
#include <random>
#include <functional>
#include <map>
 
template <typename Map, typename KeyGenerator, typename ValGenerator>
void generateUnique(Map& m, const size_t N, KeyGenerator keygen, ValGenerator valgen)
{
    typedef typename Map::key_type Key;
    typedef typename Map::mapped_type Type;
    for (size_t i=0; i < N; i++)
    {
        Key k;
        do
        {
            k = keygen();
        } while (m.find(k) != m.end());
        Type val = valgen();
        m.emplace(k, val);
    }
}
 
int main()
{
    const size_t N = 10;
    std::map<int, int> m;
 
    std::mt19937 gen {std::random_device()() };
    std::uniform_int_distribution<> uid(0, N);
    auto roll = std::bind(uid, gen);
 
    generateUnique(m, N, roll, roll);
    for (auto &p: m)
        std::cout << p.first << " => " << p.second << std::endl;
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.10.2013, 16:46
Цитата Сообщение от MrGluck Посмотреть сообщение
надо получить 10 целых неповторяющихся чисел от 0 до 11. С рандом шафл это всего-лишь 2 варианта без изменения правила генерации последовательности, у меня же возможно получить 11.
О каких вариантах речь? Если для диапазона [0..11] нужно получить последовательность из 10 разных чисел, то таких последовательностей будет 12!/(12-10)!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.10.2013, 16:46

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

Заполнение контейнера map объектами класса
Здравствуйте! Помогите разобраться с map. Не получается заполнить контейнер объектами класса. Если можно, напишите простой пример.

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

Заполнение map символами и количеством их встреч в файле
#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; ...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru