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

Заполнить map - C++

Восстановить пароль Регистрация
 
Udarnik
1 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 30
22.08.2013, 23:25     Заполнить map #1
Как заполнить этот "мар" несколькими значениями к фамилии?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
#include<vector>
#include <map>
#include <string>
 
void main()
    vector <int>v1 (3,4) ;
 
    int i=0;
    multimap <string,vector<int>>::iterator it1;
   multimap <string,vector<int>> m1;
    typedef pair <string,vector<int>> pair1;
 
 
 
    for(int i=0;i<5;i++){
    m1.insert ( pair1(  "Petrov",1,2,3,5,4 ));
    m1.insert ( pair1 ( "Sidorov",9,8,7,7 ) );
    m1.insert ( pair1 ( "Semonov", 10,3,6,8,9 ) );
    }   
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2013, 23:25     Заполнить map
Посмотрите здесь:

C++ map<> в C, не в C++!
Map'ы C++
Map'ы C++
C++ Заполнить контейнер map и vector данными из файла
Заполнить map из потока ввода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Semyon2105
1 / 1 / 0
Регистрация: 16.12.2012
Сообщений: 6
23.08.2013, 00:13     Заполнить map #2
Попробуйте m1.emplace({"Name", {1, 2, 3}})

Добавлено через 9 минут
точнее m1.insert(pair1("Name", vector<int>{1, 2, 3}))
Udarnik
1 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 30
23.08.2013, 00:21  [ТС]     Заполнить map #3
Цитата Сообщение от Semyon2105 Посмотреть сообщение
Попробуйте m1.emplace({"Name", {1, 2, 3}})

Добавлено через 9 минут
точнее m1.insert(pair1("Name", vector<int>{1, 2, 3}))
Ни первый, ни второй способ непомог, только число "3" заносит.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
23.08.2013, 00:22     Заполнить map #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
#include <string>
#include <map>
 
int main()
{
    using map = std::map<std::string, std::vector<int>>;
 
    map mymap;
    mymap.insert(std::make_pair("One", std::vector<int>{1,2,3,4,5}));
    mymap.insert(std::make_pair("Two", std::vector<int>{10,20,30,40,50}));
 
    for(const auto& i : mymap)
    {
        std::cout << i.first << std::endl;
        for(int j : i.second) std::cout << j << " ";
        std::cout << std::endl;
    }
 
    std::cout << std::endl;
    return 0;
}
Semyon2105
1 / 1 / 0
Регистрация: 16.12.2012
Сообщений: 6
23.08.2013, 00:27     Заполнить map #5
Цитата Сообщение от Udarnik Посмотреть сообщение
Ни первый, ни второй способ непомог, только число "3" заносит.
Если второй не работает, то нету поддержки initializer_list в компиляторе. Компилятор VC++? Если да, то придется вручную создавать вектор и потом передавать его в пару по имени переменной.
Udarnik
1 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 30
23.08.2013, 00:39  [ТС]     Заполнить map #6
Цитата Сообщение от DiffEreD Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
#include <string>
#include <map>
 
int main()
{
    using map = std::map<std::string, std::vector<int>>;
 
    map mymap;
    mymap.insert(std::make_pair("One", std::vector<int>{1,2,3,4,5}));
    mymap.insert(std::make_pair("Two", std::vector<int>{10,20,30,40,50}));
 
    for(const auto& i : mymap)
    {
        std::cout << i.first << std::endl;
        for(int j : i.second) std::cout << j << " ";
        std::cout << std::endl;
    }
 
    std::cout << std::endl;
    return 0;
}
Спасибо за проделаную роботу не у меня не работает.
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
23.08.2013, 00:43     Заполнить map #7
Цитата Сообщение от Udarnik Посмотреть сообщение
Спасибо за проделаную роботу не у меня не работает.
это с++11 обновите компилятор
Udarnik
1 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 30
23.08.2013, 00:44  [ТС]     Заполнить map #8
Цитата Сообщение от Semyon2105 Посмотреть сообщение
Если второй не работает, то нету поддержки initializer_list в компиляторе. Компилятор VC++? Если да, то придется вручную создавать вектор и потом передавать его в пару по имени переменной.
У меня VS2010 C++
Semyon2105
1 / 1 / 0
Регистрация: 16.12.2012
Сообщений: 6
23.08.2013, 00:45     Заполнить map #9
Если изначально создать вектор,
C++
1
vector<int> v(5)
и потом туда забить значения
C++
1
2
3
v.push_back(0);
v.push_back(1);
...
И потом сделать пару,
C++
1
m.insert(pair1("Name", v));
то должно работать на любом компиляторе
Udarnik
1 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 30
23.08.2013, 00:52  [ТС]     Заполнить map #10
Цитата Сообщение от Semyon2105 Посмотреть сообщение
Если изначально создать вектор,
C++
1
vector<int> v(5)
и потом туда забить значения
C++
1
2
3
v.push_back(0);
v.push_back(1);
...
И потом сделать пару,
C++
1
m.insert(pair1("Name", v));
то должно работать на любом компиляторе
Вот тепер да.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2013, 01:00     Заполнить map
Еще ссылки по теме:

C++ Как вставить map в map
Приведение map<int, B> к map<int, A> C++
C++ Map of map

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

Или воспользуйтесь поиском по форуму:
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
23.08.2013, 01:00     Заполнить map #11
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
#include <iostream>
#include <vector>
#include <string>
#include <map>
 
int main()
{
    typedef std::multimap<std::string, std::vector<int>> map;
    typedef std::multimap<std::string, std::vector<int>>::iterator it;
 
    map mymap;
 
    int arr1[] = {1,2,3,4,5};
    int arr2[] = {10,20,30,40,50};
    mymap.insert(std::make_pair("One", std::vector<int>(arr1, arr1 + sizeof arr1/sizeof(int))));
    mymap.insert(std::make_pair("Two", std::vector<int>(arr2, arr2 + sizeof arr2/sizeof(int))));
 
    for(it i = mymap.begin(); i!=mymap.end(); ++i)
    {
        std::cout << (*i).first << std::endl;
        for(size_t j = 0; j<(*i).second.size(); ++j)
            std::cout << (*i).second[j] << " ";
        std::cout << std::endl;
    }
 
    system("pause");
    return 0;
}
Yandex
Объявления
23.08.2013, 01:00     Заполнить map
Ответ Создать тему
Опции темы

Текущее время: 17:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru