Скидываю свой код, сильно не бросайте камнями. Я попробывала раздилить на два потока. Но хочется правильно и красво сделать.
Код: Выделить всё
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <vector>
#include <thread>
size_t CountValue(const int* array, const size_t size, const int value)
{
const int* begin = array;
const int* end = array + size;
const int* low = std::lower_bound(begin, end, value);
if ((low != end) && (*low == value))
{
auto up = std::upper_bound(low, end, value);
return std::distance(low, up);
}
return 0;
}
int main()
{
int arrayFirst[] = { 11, 5, 2, 8, 4, 5, 2, 5, 7, 9, 12, 16, 17, 18, 20 };
int arraySecond[] = { 22, 5, 8, 3, 2, 9, 4, 3, 9, 10 };
int size = sizeof(arraySecond) / sizeof(arraySecond[0]);
std::sort(arraySecond, arraySecond + size);
//const std::size_t maxThreadCount = std::thread::hardware_concurrency();
//std::vector<std::thread> threads(maxThreadCount);
std::vector<std::thread> threads1(size / 2);
std::vector<std::thread> threads2(size / 2);
for (int index = 0; index < size / 2; ++index)
{
if (arraySecond[index] != arraySecond[index + 1])
std::cout << "Value:" << arraySecond[index] << "-" << CountValue(arrayFirst, size, arraySecond[index]) << "\n";
threads1[index].join();
}
for (int index = size / 2; index < size; ++index)
{
if (arraySecond[index] != arraySecond[index + 1])
std::cout << "Value:" << arraySecond[index] << "-" << CountValue(arrayFirst, size, arraySecond[index]) << "\n";
threads2[index].join();
}
return 0;
}