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

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

Войти
Регистрация
Восстановить пароль
 
ChuckNorris
2 / 2 / 0
Регистрация: 25.10.2012
Сообщений: 42
#1

STL, множества - C++

15.10.2013, 22:02. Просмотров 415. Ответов 5
Метки нет (Все метки)

Есть задача:

В три газетных киоска поступают газеты из имеющегося списка. Определить, какие газеты не заказали в один из киосков, какие газеты бывают в каждом киоске, какие можно купить хотя бы в одном киоске.

Мой код:

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <set>
#include <string>
#include <locale>
#include <string>
#include <string.h>
#include <algorithm>
#include <conio.h>
using namespace std;
 
int main()
{
    string all_gz[]=                           
    {
        "New Your Times", "The Denver Post","Chicago Tribune", 
        "New York Post", "Newsday",  
        "Rutland Herald","The Star-Ledger","Houston Chronicle",            /*имеющийся список газет*/
        "Boston", "The Recorder", "Pittsburgh Post-Gazette"
    };
 
    set<string, less<string> > allset(all_gz, all_gz + 11);
    set<string, less<string> >::iterator iter;
    
cout<<"All gazets:\n\n";
 
iter = allset.begin(); 
while(iter != allset.end())
cout << *iter++ << '\n';
 
 
//////////////////////////////////////////
 
string gz1[]=
    {
        "New Your Times", "Chicago Tribune", 
        "New York Post", "Newsday", "Boston"   /* газеты которые заказали в 1 киоск
                                               ни в одном киоске нет  "The Star-Ledger" "The Recorder", "Rutland Herald"*/
    };
 
set<string, less<string> > set1(gz1,gz1+5);
set<string, less<string> >::iterator iter1;
    
    
iter1 = set1.begin(); 
while(iter1 != set1.end())
cout << *iter1++ << '\n';
 
 
/////////////////////////////////////////////////////////////
 
 
string gz2[]=
    {
        "New Your Times", "The Denver Post","Chicago Tribune", 
        "New York Post", "Newsday", "Houston Chronicle","Boston"     
                       /*газеты которые заказали во 2 киоск, во втором есть "Houston Chronicle" 
                       "The Denver Post" но и их нет в 1 и 3 киосках*/
          };
 
set<string, less<string> > set2(gz2, gz2 + 7);
set<string, less<string> >::iterator iter2;
    
    cout<<"<<<<<2nd kiosk: >>>>"<<endl;
iter2 = set2.begin(); 
while(iter2 != set2.end())
cout << *iter2++ << '\n';
 
 
//////////////////////////////////////////////////
 
string gz3[]=
    {
        "New Your Times","Chicago Tribune", 
        "New York Post", "Newsday", 
        "Boston", "Pittsburgh Post-Gazette"
        /*газеты которые заказали в 3 киоск, в третьем есть  
       "Pittsburgh Post-Gazette" но их нет в 1 и 2 киосках */
    };
 
set<string, less<string> > set3(gz3, gz3 + 6);
set<string, less<string> >::iterator iter3;
    
cout<<"<<<<<3d kiosk: >>>>"<<endl;
iter3 = set3.begin(); 
while(iter3 != set3.end())
cout << *iter3++ << '\n';
    getch();
    return 0;
}
Помогите пожалуйста дописать как оно будет определять где какую газету заказали и виводить
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 22:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос STL, множества (C++):

Множества STL - C++
Подскажите плиз, как удалить из двух множеств STL одинаковые элементы?

Множества без STL - C++
Решаю задачу: ввести н-ое количество множеств и найти их обьединение. Объединение это новое множество в состав которого входят элементы...

STL Пересечение множества и вектора - C++
Задание представлено так провести синхронизацию, чтобы в vector и map остались только имеющиеся в обоих контейнерах элементы. ...

Как получить доступ к объектам set-множества? (STL) - C++
Помогите, пожалуйста: запихал в контейнер set объекты класса, а как потом получить доступ к определенному полю объекта в контейнере - не...

Число изъять из множества А, если оно является элементом множества А, но не является элементом множества В - C++
Введено с клавиатуры число изъять из множества А, если оно является элементом множества А, но не является элементом множества В. ...

Множества. Вычислить количество элементов множества Q, связанного c исходными множествами - C++
В общем задание звучит так : Заданы 3 упорядоченных множества F, G и H, представленные файлами f, g и h соответственно. Вычислить...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
15.10.2013, 23:43 #2

Не по теме:

Ужасный код с ужасным форматированием.


Если по теме, то это простые операции с множествами.
Цитата Сообщение от ChuckNorris Посмотреть сообщение
какие газеты не заказали в один из киосков
Если в один из киосков, то вычетаем из множества всех газет множество газет в этом киоске: банальный цикл с удалениями.
Цитата Сообщение от ChuckNorris Посмотреть сообщение
какие газеты бывают в каждом киоске
Банальная сумма множеств. Цикл по всем газетным киоскам (точнее, по множествам газет) и добавляем в новоиспечённую коллекцию.
Цитата Сообщение от ChuckNorris Посмотреть сообщение
какие можно купить хотя бы в одном киоске
То же самое, что и в прошлом, просто формулировка другая.
Avazart
Эксперт С++
7148 / 5325 / 276
Регистрация: 10.12.2010
Сообщений: 23,566
Записей в блоге: 17
16.10.2013, 00:11 #3
Лезешь сюда к примеру http://www.cplusplus.com/reference/a...ic_difference/

И смотришь что тебе из алгоритмов может пригодится
C++
1
2
3
4
5
includes<>()
set_union<>()
set_difference<>()
set_symmetric_difference<>()
set_intersection<>()
ChuckNorris
2 / 2 / 0
Регистрация: 25.10.2012
Сообщений: 42
16.10.2013, 01:03  [ТС] #4
Цитата Сообщение от AnyOne697 Посмотреть сообщение

Не по теме:

Ужасный код с ужасным форматированием.


Если по теме, то это простые операции с множествами.

Если в один из киосков, то вычетаем из множества всех газет множество газет в этом киоске: банальный цикл с удалениями.

Банальная сумма множеств. Цикл по всем газетным киоскам (точнее, по множествам газет) и добавляем в новоиспечённую коллекцию.

То же самое, что и в прошлом, просто формулировка другая.
напишите пожалуйста если можете реализицию кода, а то я непредставляю как ето сделать
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
16.10.2013, 01:32 #5
Цитата Сообщение от Avazart Посмотреть сообщение
И смотришь что тебе из алгоритмов может пригодится
Мне кажется, что это какая-та практика или лабораторная или ещё чего. В общем, вряд ли прокатит такой трюк.
Цитата Сообщение от ChuckNorris Посмотреть сообщение
напишите пожалуйста если можете реализицию кода, а то я непредставляю как ето сделать
Ну что именно не понятно? Всё сделать что ли?... Нет уж. Ошибочка с разделом. Если непонятно, как писать на языке, то стоит и книгу прочитать и попрактиковаться. Не двух минут дело изучить язык. Новый. Синтетический. Компьютерный.
Или же непонятно в чём-то конкретно? Пишите конкретнее свои проблемы.
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
16.10.2013, 02:57 #6
Цитата Сообщение от ChuckNorris Посмотреть сообщение
Определить, какие газеты не заказали в один из киосков, какие газеты бывают в каждом киоске, какие можно купить хотя бы в одном киоске.
Фактически сводится к выводу списков газет, которые заказали в одном киоске, в двух и во всех.
Примерный алгоритм:
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
#include <iostream>
#include <vector>
#include <unordered_map>
 
typedef std::unordered_map<std::string, int> un_map;
typedef std::vector<std::string> v_str;
 
 
int main()
{
    const int N = 3;
    v_str delivery[N] =
    {
        {
            "New Your Times", "Chicago Tribune", "New York Post", "Newsday",
            "Boston"
        },
        {
            "New Your Times", "The Denver Post", "Chicago Tribune",
            "New York Post", "Newsday", "Houston Chronicle", "Boston"
        },
        {
            "New Your Times", "Chicago Tribune", "New York Post", "Newsday",
            "Boston", "Pittsburgh Post-Gazette"
        }
    };
 
    un_map orders;
    for (auto &d: delivery)
        for (auto &newspaper: d)
            ++orders[newspaper];
 
    for (int i=1; i <= N; i++)
    {
        std::cout << "Ordered in " << i << " kiosks:\n";
        for (auto &o: orders)
            if (o.second == i)
                std::cout << o.first << ", ";
        std::cout << std::endl << std::endl;
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2013, 02:57
Привет! Вот еще темы с ответами:

Квадрат с вершинами из первого множества накрывает все точки второго множества и имеет минимальную площадь - C++
Даны два множества точек на плоскости. Выбрать четыре различных точки первого множества так, чтобы квадрат с вершинами в этих точках...

Множества. Проверка множества на наличие элемента в нем - C++
Во многих задачах сталкиваюсь с одной и той же проблемой: Нужно создать множество элементов, добавлять в него новые элементы и проверять...

Множества . Найти разность полученного множества с заданным - C++
Всем доброго времени суток! Необходима ваша помощь. Никак не могу сделать второй пункт задачи.Суть задачи-найти 1)объединение множества...

Удалить из множества А минимальный элемент множества В - C++
Удалить из множества А минимальный элемент множества В. могу удалить из A все елементи B. а минимальний нет( #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.10.2013, 02:57
Ответ Создать тему
Опции темы

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