Самая быстрая группировка значений ключейC++

Программы на C++. Форум разработчиков
Anonymous
Самая быстрая группировка значений ключей

Сообщение Anonymous »

Каков современный подход к группировке ключей по значениям при наличии массива пар ?

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

template
struct tiktok
{
std::vector starts;
void reset() { starts.reserve(50); starts.resize(0); }
tiktok() { reset(); }
std::size_t tik() {
starts.emplace_back(std::chrono::steady_clock::now());
return 0;
}
std::size_t tok() {
std::size_t rst = std::chrono::duration_cast (
std::chrono::steady_clock::now() - starts.back()).count();
starts.pop_back();
return rst;
}
};

int main()
{
int NuniqueString = 3e5;
std::vector x(NuniqueString);
std::mt19937 rng(123);
for (auto& u: x) {
u = std::string(rng() % 1024 + 1, ' ');
char* c = &u[0];
for (int i = 0, iend = u.size(); i < iend; ++i)
c[i] = rng() % 256;
}

// The key-value pair definition.
struct Item { int key; std::string s; };
std::vector items(x.size() * 10);
for (int i = 0, iend = items.size(); i < iend; ++i) {
items[i].key = i;
items[i].s = x[rng() % NuniqueString];
}
auto itemsReserve = items;

// Measure time cost for grouping items' keys, using STL unordered_map
tiktok timer;
if constexpr (true) {
std::unordered_map<
std::string, std::vector > H (items.size() * 1.3);
timer.tik();
std::for_each(items.begin(), items.end(), [&](auto& i)->void {
H[std::move(i.s)].push_back(i.key);
});
std::cout second.push_back(i.key);
});
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78659865/fastest-key-value-grouping[/url]

Вернуться в «C++»