Size: a a a

2020 July 23

CD

Constantine Drozdov in supapro.cxx
короче, несколько лет самых честных контестов в мире было
источник

CD

Constantine Drozdov in supapro.cxx
одинаковые C++ vs Java
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺... in supapro.cxx
Constantine Drozdov
я тебе рассказывал байку, что у нас на сервере C++ и Java работали одинаково, а потом мы заметили -O0?
классика
источник

AS

Anatoly Shirokov in supapro.cxx
tamtakoe
Выложил, как обещал, в репу https://github.com/tamtakoe/node-addon-test
В ридми описание как запускать и что делает
P.S. Для тех, кто не в теме, это сравнение алгоритма на JS и C++. Последний работает в 10 раз медленнее
а зачем повторять код JS на С++? у С++ свои средства есть:
#include <deque>
#include <iostream>
#include <map>

template<typename T, typename C, typename GT, typename AT>
auto groupBy(const C& items, GT T::*group, AT T::*field)
{
 std::map<GT, AT> m;
 for(auto&& item: items)
 {
   m[item.*group] += item.*field;
 }
 return m;
}

int main()
{
 struct item_type
 {
   std::string type;
   double price;
   int amount;
 };
 const std::deque<item_type> items = {
   {"group1", 10.0, 2},
   {"group2", 10.0, 3},
   {"group1", 10.0, 3},
   {"group1", 10.0, 3},
 };
 auto groups = groupBy(items, &item_type::type, &item_type::price);
 for(auto&& group : groups)
 {
   std::cout << group.first << ": " << group.second << std::endl;
 }
}
источник

AS

Anatoly Shirokov in supapro.cxx
или на подходе std::ranges
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺... in supapro.cxx
Anatoly Shirokov
а зачем повторять код JS на С++? у С++ свои средства есть:
#include <deque>
#include <iostream>
#include <map>

template<typename T, typename C, typename GT, typename AT>
auto groupBy(const C& items, GT T::*group, AT T::*field)
{
 std::map<GT, AT> m;
 for(auto&& item: items)
 {
   m[item.*group] += item.*field;
 }
 return m;
}

int main()
{
 struct item_type
 {
   std::string type;
   double price;
   int amount;
 };
 const std::deque<item_type> items = {
   {"group1", 10.0, 2},
   {"group2", 10.0, 3},
   {"group1", 10.0, 3},
   {"group1", 10.0, 3},
 };
 auto groups = groupBy(items, &item_type::type, &item_type::price);
 for(auto&& group : groups)
 {
   std::cout << group.first << ": " << group.second << std::endl;
 }
}
s/map/unordered_map/g
источник

AS

Anatoly Shirokov in supapro.cxx
Vladislav 🇺🇸🚜🇷🇺
s/map/unordered_map/g
не, пусть будут упорядоченные группы
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺... in supapro.cxx
или там по порядку надо?
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺... in supapro.cxx
но в любом случае, unordered_map + sort вероятно будет чуть быстрее
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Vladislav 🇺🇸🚜🇷🇺
но в любом случае, unordered_map + sort вероятно будет чуть быстрее
надо еще в контейнер сложить
источник

AS

Anatoly Shirokov in supapro.cxx
Anatoly Shirokov
а зачем повторять код JS на С++? у С++ свои средства есть:
#include <deque>
#include <iostream>
#include <map>

template<typename T, typename C, typename GT, typename AT>
auto groupBy(const C& items, GT T::*group, AT T::*field)
{
 std::map<GT, AT> m;
 for(auto&& item: items)
 {
   m[item.*group] += item.*field;
 }
 return m;
}

int main()
{
 struct item_type
 {
   std::string type;
   double price;
   int amount;
 };
 const std::deque<item_type> items = {
   {"group1", 10.0, 2},
   {"group2", 10.0, 3},
   {"group1", 10.0, 3},
   {"group1", 10.0, 3},
 };
 auto groups = groupBy(items, &item_type::type, &item_type::price);
 for(auto&& group : groups)
 {
   std::cout << group.first << ": " << group.second << std::endl;
 }
}
и вариант с множеством агрегируемых полей:
#include <deque>
#include <iostream>
#include <map>
#include <tuple>
#include <utility>

template<typename T, typename C, typename G, size_t... I, typename ...A>
auto groupBy_(const C& items, G T::* group, std::index_sequence<I...>, A T::*...fields)
{
 std::map<G, std::tuple<A...>> map;
 for (auto&& item : items)
 {
   auto& tuple = map[item.*group];
   ((std::get<I>(tuple) += item.*fields), ...);
 }
 return map;
}

template<typename T, typename C, typename GT, typename ...AT>
auto groupBy(const C& items, GT T::*group, AT T::*...fields)
{
 return groupBy_(items, group, std::make_index_sequence<sizeof...(AT)>{}, fields...);
}

int main()
{
 struct item_type
 {
   std::string type;
   double price;
   int amount;
 };
 const std::deque<item_type> items = {
   {"group1", 10.0, 2},
   {"group2", 10.0, 3},
   {"group1", 10.0, 3},
   {"group1", 10.0, 3},
 };
 auto groups = groupBy(items, &item_type::type, &item_type::price, &item_type::amount);
 for (auto&& group : groups)
 {
   std::cout << group.first << ": " << std::get<0>(group.second) << ", " << std::get<1>(group.second) << std::endl;
 }
}
источник

CD

Constantine Drozdov in supapro.cxx
Anatoly Shirokov
и вариант с множеством агрегируемых полей:
#include <deque>
#include <iostream>
#include <map>
#include <tuple>
#include <utility>

template<typename T, typename C, typename G, size_t... I, typename ...A>
auto groupBy_(const C& items, G T::* group, std::index_sequence<I...>, A T::*...fields)
{
 std::map<G, std::tuple<A...>> map;
 for (auto&& item : items)
 {
   auto& tuple = map[item.*group];
   ((std::get<I>(tuple) += item.*fields), ...);
 }
 return map;
}

template<typename T, typename C, typename GT, typename ...AT>
auto groupBy(const C& items, GT T::*group, AT T::*...fields)
{
 return groupBy_(items, group, std::make_index_sequence<sizeof...(AT)>{}, fields...);
}

int main()
{
 struct item_type
 {
   std::string type;
   double price;
   int amount;
 };
 const std::deque<item_type> items = {
   {"group1", 10.0, 2},
   {"group2", 10.0, 3},
   {"group1", 10.0, 3},
   {"group1", 10.0, 3},
 };
 auto groups = groupBy(items, &item_type::type, &item_type::price, &item_type::amount);
 for (auto&& group : groups)
 {
   std::cout << group.first << ": " << std::get<0>(group.second) << ", " << std::get<1>(group.second) << std::endl;
 }
}
Толя, не души человека, он с js пришел неделю назад
источник

CD

Constantine Drozdov in supapro.cxx
А ты ему вариадики через index_sequence
источник

JJ

John Johnson in supapro.cxx
Как называется конструкция вида {125,111,221,217,99} в define?
источник

JJ

John Johnson in supapro.cxx
Это последовательность байто но я не смог статьи найти в reference
источник

ПК

Побитый Кирпич... in supapro.cxx
John Johnson
Как называется конструкция вида {125,111,221,217,99} в define?
при чем здесь define?
источник

JJ

John Johnson in supapro.cxx
Побитый Кирпич
при чем здесь define?
да просто вместе было. как называется эта конструкция с байтами?
источник

AF

Aidar Fattakhov in supapro.cxx
Constantine Drozdov
Толя, не души человека, он с js пришел неделю назад
Посмотри в details
источник

D

Danya in supapro.cxx
John Johnson
да просто вместе было. как называется эта конструкция с байтами?
Это не байты
источник

D

Danya in supapro.cxx
std::initilizer_list<int>
источник