С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
1

Найти пересечение множеств ключей двух map

24.04.2015, 11:49. Показов 3628. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Имеется 2 map'а:

C++
1
2
map<string, double> map1;
map<string, double> map2;
Требуется сложить ключи, являющиеся общими для map1 и map2, в вектор.

C++
1
vector<string> intersect;
Я понимаю, что надо сделать итератор

C++
1
map<string, double>::iterator it
,
прогнать его через map1 и использовать find в map2.
Но мне непонятно, как записать выражение, значением которого будет string, являющийся ключом.

Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2015, 11:49
Ответы с готовыми решениями:

Найти пересечение и объединения заданных множеств
Здравствуйте. У меня следующая задача: Даны множества U={1,2,3,4,…,25} та три ее подмножества...

Найти пересечение, объединение, разность, симметрическую разность множеств
Задание: Написать программу, которая проделывается операции над множествами (пересечение,...

Найти пересечение двух массивов
Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать:-Общие элементы...

Найти пересечение двух прямоугольников
Подскажите как можно быстрее написать программу, которая будет искать точки пересечений двух...

7
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.04.2015, 11:56 2
Лучший ответ Сообщение было отмечено rotciv как решение

Решение

Цитата Сообщение от rotciv Посмотреть сообщение
Я понимаю, что надо сделать итератор
Не обязательно делать это явно. Например:
C++
1
2
3
4
5
for( const auto& e : map1 ) // Нужна поддержка c++11
{
    if( map2.count( e.first ) )
        intersect.push_back( e.first );
}
1
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
24.04.2015, 12:08  [ТС] 3
Цитата Сообщение от Tulosba Посмотреть сообщение
Нужна поддержка c++11
Эх, с этим-то у меня проблемы... хозяин компа сидит на Qt и не осознает необходимости с++11
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.04.2015, 12:52 4
Цитата Сообщение от rotciv Посмотреть сообщение
хозяин компа
Вы не хозяин своего компа?
0
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
24.04.2015, 13:34  [ТС] 5
Цитата Сообщение от MrGluck Посмотреть сообщение
Вы не хозяин своего компа?
Увы, нет.
В больших организациях, как правило, рядовые пользователи существенно ограничены в правах.

Мой рабочий комп - виндовый, а компиляция идет в среде Линуха.
Самый свежий компилятор из имеющихся - в RH6, на компе коллеги.

Решение проблемы - организация на сервере виртуального компа, который можно сконфигурировать так, как мне надо. Но это потребует времени. А пока - живу с тем, что есть.

Но решения, предложенного уважаемым Tulosba, достаточно, чтобы двигаться вперед. Правда, придется воспользоваться при этом итератором в явном виде.

Добавлено через 24 минуты
Прошло в таком варианте.
C++
1
2
3
  for(map<string, double>::iterator it=DataBlock.begin(); it!=DataBlock.end(); it++) {
    if(DataBlock2.count(it->first))
      Intersect.push_back(it->first);
0
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.04.2015, 14:14 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <algorithm>
#include <iterator>
 
typedef std::pair<std::string, double> pair_t;
 
struct comp : std::binary_function<pair_t, pair_t, bool>
{
   bool operator()(const pair_t& p1, const pair_t& p2) const {
      return p1.first < p2.first;
   }
};
 
struct pair_transf : std::unary_function<pair_t, pair_t::first_type>
{
   pair_t::first_type operator()(const pair_t& p) const {
      return p.first;
   }
};
 
int main()
{
   std::map<std::string, double> map1;
   std::map<std::string, double> map2;
   map1.insert(std::make_pair("B", 2));
   map1.insert(std::make_pair("C", 3));
   map1.insert(std::make_pair("A", 4));
   map1.insert(std::make_pair("F", 6));
 
   map2.insert(std::make_pair("F", 7));
   map2.insert(std::make_pair("A", 8));
   map2.insert(std::make_pair("E", 9));
   map2.insert(std::make_pair("C", 10));
 
   std::vector<std::string> res;
 
   std::map<std::string, double> map_res;
   std::set_intersection(map1.begin(), map1.end(),
                         map2.begin(), map2.end(),
                         std::inserter(map_res, map_res.begin()),
                         comp());
   std::transform(map_res.begin(), map_res.end(), std::back_inserter(res),
                  pair_transf());
   std::copy(res.begin(), res.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
1
Эксперт по математике/физикеЭксперт С++
2206 / 1411 / 411
Регистрация: 16.05.2013
Сообщений: 3,597
Записей в блоге: 6
24.04.2015, 14:21 7
Цитата Сообщение от MrGluck Посмотреть сообщение
Вы не хозяин своего компа?
Цитата Сообщение от rotciv Посмотреть сообщение
Увы, нет.
Название: images.jpeg
Просмотров: 53

Размер: 3.1 Кб
1
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
24.04.2015, 14:38  [ТС] 8
DiffEreD,
Работает!
0
24.04.2015, 14:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2015, 14:38
Помогаю со студенческими работами здесь

пересечение множеств
найти пересечение мнжества А и В. Результат вывести в другом множестве. заранее спс. извиняюсь...

Пересечение множеств
Есть такое задание: Создать класс- множество. Функции-члены реализуют добавление и удаление ...

Пересечение множеств
Здравствуйте. У меня следующая задача: Даны 2 множества A и B, причем множество B отсортировано...

Пересечение множеств
Вход — два множества натуральных чисел. Выход — их пересечение (перечисление элементов через...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru