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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.64
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
02.10.2011, 12:12     контейнер map #1
Помогите, пожалуйста дописать программу. Определите карту, в которой ключом является фамилия семьи, а значением вектор, который содержит имя ребёнка и его возраст. Заполните карту по крайней мере 6 елементами.
Проверить работоспособность карты.

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
#include <iostream>
#include <vector>
#include <string>
#include <map>
 
using namespace std;
int main ()
{
   map <string, vector< pair <string, int> > > my_map;
 
    pair <string, int> para1 ("Sawa", 11) ;
    pair <string, int> para2 ("Mawa", 21) ;
    pair <string, int> para3 ("Tolik", 31) ;
    pair <string, int> para4 ("Boris", 14) ;
    pair <string, int> para5 ("Ira", 15) ;
    pair <string, int> para6 ("Kat", 24) ;
 
vector< pair <string, int> > my_vect;
 
my_vect.push_back(para1);
my_vect.push_back(para2);
my_vect.push_back(para3);
my_vect.push_back(para4);
my_vect.push_back(para5);
my_vect.push_back(para6);
 
for (vector< pair <string, int> >::size_type ix=0; ix!=my_vect.size(); ++ix) 
std::cout<< my_vect[ix].first <<" : "<<my_vect[ix].second<<endl;
 
...
 
system("pause");
return 0;
}

Вот имя и возраст ребёнка оформил чераз тип пара (pair), записал в вектор, вывел для проверки на екран, всё работает. А вот как связать заданное значение карты (имя и возраст) с ключом (фамилией), этого не знаю. Допустим там фамилии Иванов, Петров, Сидоров... как к этим ключам подвязать мои заготовленные в векторе значения ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2011, 12:12     контейнер map
Посмотрите здесь:

C++ Ассоциативный контейнер типа map
C++ Контейнер map ?
C++ Контейнер map, с двумя ключами?
C++ Контейнер map
C++ Чтение из файла в контейнер map
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.10.2011, 13:11     контейнер map #2
вектор сдесь нафиг не нужен
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
#include <functional>
#include <algorithm>
#include <iostream>
#include <string>
#include <map>
 
template< class Key, class Val = std::pair < class Key1, class Val1 > >
struct print_pair : std::unary_function< std::pair< Key, Val >, std::ostream& > { 
    std::ostream& ost;
    print_pair(std::ostream& os) : ost(os) { }
    std::ostream& operator() (const std::pair< Key, Val >& p)
    {
        return ost << p.first << '\t' << p.second.first << '\t' << p.second.second << '\n';
    }
};
 
int main ()
{
    std::map< std::string, std::pair< std::string, unsigned > > map;
 
    map["Sidorov"] = std::pair< std::string, unsigned >("Sawa", 11) ;
    map["Ivanov"]  = std::pair< std::string, unsigned >("Mawa", 21) ;
    map["Petrov"]  = std::pair< std::string, unsigned >("Tolik", 31) ;
 
    std::for_each(map.begin(), map.end(), print_pair< std::string, std::pair< std::string, unsigned > >(std::cout));
 
    system("pause");
    return 0;
}
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
02.10.2011, 13:20     контейнер map #3
C++
1
my_map["фамилия"].push_back(std::make_pair("Sawa", 11));
Но, для наглядности кода я всё-таки рекомендовал бы создать свою структуру вроде
C++
1
2
3
4
5
struct child_base_info
{
    std::string name;
    int age;
};
вместо std::pair. И вот такие конструкции
C++
1
map <string, vector< pair <string, int> > >
лучше прятать используя typedef.
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
02.10.2011, 17:17  [ТС]     контейнер map #4
Спасибо, но я без вектора не могу, он должен быть по условию задачи
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.10.2011, 18:19     контейнер map #5
Цитата Сообщение от Romiys Посмотреть сообщение
Спасибо, но я без вектора не могу, он должен быть по условию задачи
это не меняет принципа работы с std::map
C++
1
2
3
std::map< KeyType, ValType > map;
map[Key] = Val; 
//если ключ Key уже имеется в контейнере, ему будет присвоено новое значение, иначе - Key будет добавлен в контейнер с значением Val
Yandex
Объявления
02.10.2011, 18:19     контейнер map
Ответ Создать тему
Опции темы

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