С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

29.10.2013, 10:40. Просмотров 4053. Ответов 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
XRuZzz
29.10.2013, 14:19     map - заполнение и удаление
  #31

Не по теме:

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

1
Tulosba
29.10.2013, 14:20
  #32

Не по теме:

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

0
XRuZzz
29.10.2013, 14:22
  #33

Не по теме:

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

0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
29.10.2013, 14:24 #34
Tulosba, ну так random_shuffle всего лишь перемешает арифмитическую последовательность. Можно конечно последов. генерить экзотическим способом, но тогда опять встанет вопрос в прослеживание дублей.
Все становится ясно, когда, например, надо получить 10 целых неповторяющихся чисел от 0 до 11. С рандом шафл это всего-лишь 2 варианта без изменения правила генерации последовательности, у меня же возможно получить 11.

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

Не по теме:

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

0
XRuZzz
29.10.2013, 14:34
  #35

Не по теме:

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

0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
29.10.2013, 14:40 #36
Цитата Сообщение от MrGluck Посмотреть сообщение
инфа 90%, мб попутал с каким другим программистом

Не по теме:

А нет, все же он.
map - заполнение и удаление

0
MrGluck
29.10.2013, 14:41
  #37

Не по теме:

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

0
XRuZzz
29.10.2013, 14:41
  #38

Не по теме:

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

0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
29.10.2013, 15:33 #39
Генерация СЧ в 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
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.10.2013, 16:46 #40
Цитата Сообщение от MrGluck Посмотреть сообщение
надо получить 10 целых неповторяющихся чисел от 0 до 11. С рандом шафл это всего-лишь 2 варианта без изменения правила генерации последовательности, у меня же возможно получить 11.
О каких вариантах речь? Если для диапазона [0..11] нужно получить последовательность из 10 разных чисел, то таких последовательностей будет 12!/(12-10)!
0
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 467
29.10.2013, 22:29  [ТС] #41
Решил представить решение из 22 поста в классе,
но почему-то возникает ошибка:
Член "ContainerProcessing::myMap" не является переменной

// *.h
C++
1
2
3
4
class ContainerProcessing {
  private:
      static map<int, int> myMap;
};
// *.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int ContainerProcessing::synchronizeContainers() {
    vector<int> original(myVector);
 
    myVector.erase(remove_if(myVector.begin(),
                             myVector.end(),
                             [&myMap](int v)  // Error: +2 перегрузок
        // Член "ContainerProcessing::myMap" не является переменной
        { return myMap.find(v) == myMap.end(); }), myVector.end());
    
    for(map<int, int>::const_iterator pos = myMap.begin();
        pos != myMap.end();) {
        if(find(original.begin(),
                original.end(),
                pos -> first) == original.end())
            pos = myMap.erase(pos);
        else
            ++pos;
    }
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
29.10.2013, 23:06 #42
Цитата Сообщение от Tulosba Посмотреть сообщение
таких последовательностей будет 12!/(12-10)!
если порядок не важен (map и так и так отсортирует же)
Код
1 2 3 4 5 6 7 8 9 10 11
0 2 3 4 5 6 7 8 9 10 11
0 1 3 4 5 6 7 8 9 10 11
0 1 2 4 5 6 7 8 9 10 11
0 1 2 3 5 6 7 8 9 10 11
0 1 2 3 4 6 7 8 9 10 11
0 1 2 3 4 5 7 8 9 10 11
0 1 2 3 4 5 6 8 9 10 11
0 1 2 3 4 5 6 7 9 10 11
0 1 2 3 4 5 6 7 8 10 11
0 1 2 3 4 5 6 7 8 9 11
0 1 2 3 4 5 6 7 8 9 10
тут ответ такой: сколькими способами можно не взять одну различную цифру. Ответ 12, ошибся на 1

Добавлено через 4 минуты
При random_shuffle последовательность после сортировки заранее известна, тут же она случайна.
0
kamre
30.10.2013, 02:23
  #43

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Это дело привычки, для меня вполне естественно видеть полное имя функции.
Почему тогда не ::std::?

0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
30.10.2013, 02:41 #44
Цитата Сообщение от kamre Посмотреть сообщение
Почему тогда не ::std::?

Не по теме:

Потому что гладиолус. Надо отличать механизм от маразма.

0
30.10.2013, 02:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2013, 02:41
Привет! Вот еще темы с ответами:

Заполнение контейнера 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,...


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

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

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