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

STL - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Michanya
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 50
11.04.2011, 00:48     STL #1
Задача 2.
Во входном файле in.txt расположена таблица, в каждой строке которой хранится "владелец", "домашнее животное", "кличка". Разместить эти данные в подходящем контейнере (контейнерах), наиболее приспособленном(ых) для решения следующих задач:
• вывести список всех владельцев домашних животных, причем для каждого владельца указать
количество видов животных;
• для каждого животного (точнее вида животного) получить количество владельцев и количество
кличек;
• для каждого животного получить список владельцев этого вида животного;
В случае необходимости, допускается для решения задач использовать дополнительные (для хранения промежуточных данных) контейнеры. Находить оптимальное решение необязательно. Гораздо важнее получить решение с максимальным использованием STL: методов контейнеров, алгоритмов, функциональных объектов. Также важно использование различного рода итераторов. Использование контейнеров для хранения входных данных обязательно.
К примеру, во всех задачах входные данные вводятся из текстового файла и могут быть записаны в контейнер(ы) с помощью одного из следующих способов (в порядке убывания приоритета):
• посредством итераторов ввода и вставки;
• с помощью цикла, используя итератор вставки для добавления элементов в контейнер;
• не используя итераторы ввода и вставки.
При использовании третьего способа никаких дополнительных балов начисляться не будет. Результаты вычислений выводить в текстовый файл out.txt Причем, в случае, когда выводимые данные можно задать диапазоном итераторов, для вывода данных в текстовый файл использовать итератор вывода.
За использование средств 8ТЪ дополнительно может быть начислено до 4-х баллов. Решение задач совсем без использования 8ТЬ не допускается.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2011, 00:48     STL
Посмотрите здесь:

STL C++
C++ STL
C++ STL
C++ STL в С++
STL C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
11.04.2011, 02:19     STL #2
Вот мне заданьице на лето - квалификацию повышать.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.04.2011, 08:52     STL #3
Цитата Сообщение от Michanya Посмотреть сообщение
Находить оптимальное решение необязательно.
Соответственно, нужно использовать std::vector.
Michanya
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 50
11.04.2011, 23:03  [ТС]     STL #4
не знаю как прочитать с файла сразу несколько животных.............а потом как использовать=(
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.04.2011, 06:29     STL #5
Считай их не сразу, а по очереди.
Michanya
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 50
12.04.2011, 22:35  [ТС]     STL #6
а как определить когда клички начинаются?
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
13.04.2011, 00:04     STL #7
По мне задача простенькая, выложи формат таблицы во входном файле какая, какие разделители использутся, всё таки нужно задачу подавать в видимом виде.
Michanya
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 50
13.04.2011, 18:04  [ТС]     STL #8
Иванов кот, марс, собака, жучка
Петров собака, чип, кроллик, дёня, рыбка, родригез
Сидоров кот, матрос, хомяк, вася


типо такого=)
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
14.04.2011, 00:12     STL #9
Quick & (very) dirty.

В файле по заданию три поля, разделенные пробелом. Владелец, вид животного, кличка.

data.txt:
Код
John Dog Mary
John Cat Susy
Jane Dog Sunny
Piter Cat Silvi
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
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
 
typedef std::map<std::string, std::string> TableRow;
typedef std::vector<TableRow> Table;
 
void PrintRow(TableRow row) {
  std::cout << row["owner"] << " " << row["pet"] << " "
            << row["nick"] << std::endl;
};
 
int main(int argc, char *argv[]) {
  Table table;
  std::back_insert_iterator<Table> inserter(table);
 
  std::ifstream source_file("data.txt");
  while (source_file.good()) {
    TableRow row;
    source_file >> row["owner"] >> row["pet"] >> row["nick"];
    if (!source_file.eof()) inserter++ = row;
  }
 
  std::for_each(table.begin(), table.end(), PrintRow);
 
  std::map<std::string, std::map<std::string, int> > owners;
  for (Table::iterator i = table.begin(); i < table.end(); ++i)
    ++(owners[(*i)["owner"]][(*i)["pet"]]);
 
  for (std::map<std::string, std::map<std::string, int> >::iterator i =
       owners.begin(); i != owners.end(); ++i) {
    std::cout << (*i).first << ": " << std::endl;
    for (std::map<std::string, int>::iterator j = i->second.begin();
         j != i->second.end(); ++j)
      std::cout << (*j).first << " = " << (*j).second << std::endl;
  }
 
  std::map<std::string, std::map<std::string, int> > pets;
  for (Table::iterator i = table.begin(); i < table.end(); ++i) {
    ++(pets[(*i)["pet"]]["owners"]);
    ++(pets[(*i)["pet"]]["nicks"]);
  }
 
  for (std::map<std::string, std::map<std::string, int> >::iterator i =
       pets.begin(); i != pets.end(); ++i) {
    std::cout << i->first << ": owners = " << i->second["owners"]
              << ", nicks = " << i->second["nicks"] << std::endl;
  }
 
  std::map<std::string, std::set<std::string> > pet_owners;
  for (Table::iterator i = table.begin(); i < table.end(); ++i)
    pet_owners[(*i)["pet"]].insert((*i)["owner"]);
 
  for (std::map<std::string, std::set<std::string> >::iterator i =
       pet_owners.begin(); i != pet_owners.end(); ++i) {
    std::cout << i->first << ": ";
    for (std::set<std::string>::iterator j = i->second.begin(); j != i->second.end(); ++j)
      std::cout << *j << " ";
    std::cout << std::endl;
  }
 
  return 0;
}
Michanya
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 50
14.04.2011, 23:00  [ТС]     STL #10
нужно создать класс где будут храниться данные..............и перезагружены ввод и вывод.........в классе в привате будут контейнеры............ и пожалуйста без "std::"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2011, 00:53     STL
Еще ссылки по теме:

C++ STL.
C++ STL
C++ STL

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

Или воспользуйтесь поиском по форуму:
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
15.04.2011, 00:53     STL #11
«Находить оптимальное решение необязательно. Гораздо важнее получить решение с максимальным использованием STL ... и пожалуйста без "std::"»
Yandex
Объявления
15.04.2011, 00:53     STL
Ответ Создать тему
Опции темы

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