/
Oppq
/
Labs
Обзор
Документация
Войти
/
Oppq
/
Labs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lab6/Task2_3.cpp
151 строка
4 KB
Oppq
upd
24 мар 2026, 18:06
Верифицирован
24 мар 2026, 18:06
42cdd92
Код
Авторство
О чём код?
// ЗАДАНИЕ 2-3 #include <iostream> #include <vector> #include <algorithm> #include <random> #include <fstream> #include <unordered_map> #include <string> using namespace std; void print(const string& name, const vector<int>& v) { cout << name << ": "; for (int x : v) cout << x << " "; cout << endl; } void task2() { cout << "\nЗадание 2\n"; cout << "Вариант 8: от -5 до 5, p=10\n\n"; vector<int> nums(15); random_device rd; mt19937 gen(rd()); uniform_int_distribution<> dist(-5, 5); // Заполнение случайными числами, до 15 (nums.size()) for (int i = 0; i < nums.size(); i++) { nums[i] = dist(gen); } // Первый вид массива после его генерации (Всё работает, позже может будет доп отладка) // void view(const vector<int>&v) { // for (int x : v) cout << x << " "; // cout << endl; // } cout << "Исходный массив (после операции генерации): "; for (int x : nums) { cout << x << " "; } cout << endl; rotate(nums.rbegin(), nums.rbegin() + 2, nums.rend()); // Реализация через сдвиг первых двух элементов вправо (налево относительно последовательности) => + 2. Реализуется посредством команды rotate меняет местами [first, middle] ; [middle, last] (параметры) cout << "Вывод массива после сдвига: "; for (int x : nums) { cout << x << " "; } cout << endl; for (int i = 0; i < nums.size(); i++) { nums[i] = nums[i] * 10; } cout << "Элементы массива после умножения на 10: "; for (int x : nums) { cout << x << " "; } cout << endl; int p = 10; int count = 0; for (int x : nums) { if (x * x > p) { count++; } } cout << "Количество элементов с квадратом > " << p << " : " << count << endl; save(nums, "result.txt"); // Сохранение в файл } // задание 3 (unordered_map с хеш-функцией через функтор) // Вариант 8: контейнер unordered_map, хеш-функция через функтор // структура-ключ: государство (название, столица), данные: численность населения // Структура-ключ "Государство" (сделано по примеру из мудла "std::hash") struct Country { string name; string capital; // из материала std::hash: "при поиске и коллизиях элементы сравниваются через operator==" bool operator==(const Country& other) const { return name == other.name && capital == other.capital; } }; // Хеш-функция через функтор struct CountryHash { size_t operator()(const Country& c) const // hash<string>()(c.name) - стандартный хеш для строки (из материала практики) // << 1 - сдвиг для перемешивания битов // ^ (XOR) - смешивает два хеша { auto h1 = hash<string>{}(c.name); auto h2 = hash<string>{}(c.capital); return h1 ^ (h2 << 1); } }; void task3() { unordered_map<Country, int, CountryHash> population; population[{"Россия", "Москва"}] = 146000000; population[{"Германия", "Берлин"}] = 83000000; population[{"Франция", "Париж"}] = 67000000; population[{"Италия", "Рим"}] = 60000000; population[{"Япония", "Токио"}] = 125000000; cout << "Население стран:\n"; for (const auto& pair : population) // country, pop — разложение пары на две переменны { cout << " " << pair.first.name << "столица " << pair.first.capital << ": " << pair.second << endl; } } int main() { setlocale(LC_ALL, "Russian"); task2(); task3(); return 0; }