Вперед Зміст

Приклад 1

Ввести число N — кількість елементів у словнику. Ввести пари країна та річка, що протікає у цій країні. Потім введіть назви декількох річок (множина). Будемо вважати, що в країні протікає одна річка але одна річка може протікає в декількох країнах. Для кожної річки вкажіть, у яких країнах вона протікає.

Код програми:

#include <iostream>
#include <map>
#include <string>
#include <sstream>
#include <set>
using namespace std;

int main() {
    // Створення словника: країна → річка
    map<string, string> country_to_river;
    
    // Введення кількості пар
    int n;
    cout << "Введіть кількість пар країна-річка: ";
    cin >> n;
    cin.ignore(1, '\n');  // Очищення буфера після вводу числа
    
    // Введення пар країна-річка
    for (int i = 1; i <= n; i++) {
        cout << "Введіть пару #" << i << " (країна річка): ";
        string s;
        getline(cin, s);
        stringstream ss(s);
        string country, river;
        ss >> country >> river;
        country_to_river[country] = river;
    }
    
    // Введення річок для пошуку
    set<string> rivers_to_find;
    int k;
    cout << "\nВведіть кількість річок для пошуку: ";
    cin >> k;
    cin.ignore(1, '\n');
    
    for (int i = 1; i <= k; i++) {
        cout << "Введіть річку #" << i << ": ";
        string river;
        getline(cin, river);
        rivers_to_find.insert(river);
    }
    
    // Пошук країн для кожної річки
    cout << "\nРезультати пошуку:\n";
    for (const string& river : rivers_to_find) {
        string result = river;
        bool found = false;
        
        // Шукаємо країни, де протікає ця річка
        for (const auto& pair : country_to_river) {
            if (pair.second == river) {
                result += " " + pair.first;
                found = true;
            }
        }
        
        if (!found) {
            result += " не знайдено в жодній країні";
        }
        cout << result << endl;
    }
    
    return 0;
}

Пояснення роботи програми:

  1. Введення даних:
    • Спочатку програма запитує кількість пар "країна-річка"
    • Потім збирає ці пари у словник country_to_river
  2. Пошук річок:
    • Користувач вводить кількість річок, які потрібно знайти
    • Ці річки зберігаються у множині rivers_to_find
  3. Виведення результатів:
    • Для кожної річки програма шукає всі країни, де вона протікає
    • Якщо річка не знайдена, виводиться відповідне повідомлення

Приклад роботи програми:


Введіть кількість пар країна-річка: 4
Введіть пару #1 (країна річка): Україна Дніпро
Введіть пару #2 (країна річка): Білорусь Дніпро
Введіть пару #3 (країна річка): Польща Вісла
Введіть пару #4 (країна річка): Німеччина Дунай

Введіть кількість річок для пошуку: 3
Введіть річку #1: Дніпро
Введіть річку #2: Вісла
Введіть річку #3: Рейн

Результати пошуку:
Дніпро Україна Білорусь
Вісла Польща
Рейн не знайдено в жодній країні

Приклад 2

Дані про домени користувачів зберігаються в масиві структур:


struct person
{
  string domen;//домен
  string user1, user2, user3;//прізвища користувачів
};
struct person emails[5];
struct person emails[]={
{"ukr.edu","serov","belova","alexandrov"},
{"gmail.com","semyonova","ivanov", "abrabova"},
{"od.edu","zharkov","lyubimova","smirnoff"},
{"harvard.edu","doe","zuckerberg","hunt"},
{"it.edu", "shifman","ray","beloff"}
};

Кожний користувач використовує лише один домен. Необхідно організувати зберігання даних у map, щоб для кожного користувача вказувався домен, який він використовує

Код програми:


#include <iostream>
using namespace std;
#include <map >
#include <string>

struct person
{
    string domen; // ДОМЕН
    string user1, user2, user3; // прізвища користувачів
};

int main()
{
    int n = 5;
    // МАСИВ ПО ДОМЕНАХ
    struct person em[n] =
    {
        {"ukr.edu", "serox", "belova", "alexandrox"},
        {"gmail.com", "semyonova", "ivanov", "abrabova"},
        {"od.edu", "zharkov", "lyubimova", "smirnoff"},
        {"harvard.edu", "doe", "zuckerberg", "hunt"},
        {"it.edu", "shifman", "ray", "beloff"}
    };

    // СЛОВНИК ПО КОРИСТУВАЧАМ
    map <string, string>  m;
    for (int i = 0; i < n; i++)
    {
        m[em[i].user1] = em[i].domen;
        m[em[i].user2] = em[i].domen;
        m[em[i].user3] = em[i].domen;
    }

    for (auto pair : m)
    {
        cout << pair.first << " : " <<pair.second << endl;
    }
    return 0;
}

Результат:

abrabova : gmail.com
alexandrox : ukr.edu
beloff : it.edu
belova : ukr.edu
doe : harvard.edu
hunt : harvard.edu

Вперед Зміст