VA
#include<iostream>
#include<random>
#include<vector>
#include<algorithm>
#include<map>
template<typename T>
void fillRandomDigitalsVector(std::vector<T>& v)
{
std::random_device rd;
std::generate(
v.begin(),
v.end(),
[&](){ return (rd() % 9 + 1); }
);
}
template<typename T>
void purgeElementsVector(std::vector<T>& v)
{
std::random_device rd;
int num = rd()%15;
for(int i = 0; i < num; i += 1)
v.pop_back();
}
template<typename T1, typename T2>
void fillRandomDigitalsMap(std::map<T1, T2>&map, const std::size_t& n)
{
std::random_device rd;
for(int i = 0; i < n; i += 1)
map[i] = rd() % 9 + 1;
}
template<typename T1, typename T2>
void purgeElementsMap(std::map<T1, T2>&map)
{
std::random_device rd;
int num = rd() % 15;
int s = map.size();
for(int i = num; i >= 0; i -= 1)
map.erase(s - i - 1);
}
std::vector<int> toVector(const std::map<int, int>& m)
{
std::vector<int> res;
res.reserve(m.size());
for (const auto & p: m)
res.push_back(p.second);
return res;
}
std::map<int, int> toMap(const std::vector<int>& v)
{
std::map<int, int> res;
for (std::size_t i = 0; i < v.size(); i++)
res[i] = v[i];
return res;
}
template <typename T1, typename T2>
void removeUnpaired(std::map<T1, T2>& map, std::vector<T2>& vec)
{
std::vector<T2> result;
std::vector<T2> mapV = toVector(map);
std::sort(vec.begin(), vec.end());
std::sort(mapV.begin(), mapV.end());
std::set_intersection
(
vec.begin(),
vec.end(),
mapV.begin(),
mapV.end(),
std::back_inserter(result)
);
map = toMap(result);
vec = std::move(result);
}
void endl()
{
std::cout << std::endl;
}
int main(int argc, char** argv)
{
std::vector<int>vec(15, 0);
fillRandomDigitalsVector(vec); //Добавляет случайные элементы в вектор
for(const auto & elem :vec)
std::cout << elem << ' ';
endl();
purgeElementsVector(vec); //Удаляет случайное число элементов(не больше 15)
for(const auto & elem :vec)
std::cout << elem << ' ';
endl();
std::map<int, int>map;
fillRandomDigitalsMap(map, 15); //Добавляет случайные элементы в map
for(const auto & elem : map)
std::cout << elem.second << ' ';
endl();
purgeElementsMap(map); //Удаляет случайное число элементов(не больше 15)
for(const auto & elem : map)
std::cout << elem.second << ' ';
endl();
removeUnpaired(map, vec); //Оставляет уникальные элементы в контейнерах
for(const auto & elem : map)
std::cout << elem.second << ' ';
endl();
for(const auto & elem :vec)
std::cout << elem << ' ';
endl();
return 0;
}
