Constantine
все равно это часть информации о ТИПЕ мапы
Constantine
наследуй если не твой
Constantine
почему? это strict type alias, в C++ он без наследования не реализуется
Constantine
а ты хочешь фабрику шаблонным параметром мапы?
Constantine
это не оверкилл?
Evgenii
блин мне надо всего лишь замапить класс к интам от 0 и возвращать -1 если в мапе такого нет
Крылатый
:D
Constantine
ну get_or_default(std::map<smth, int> const& mp, int default)
Evgenii
к этому и пришел
Constantine
да, я ключ забыл) можно так, да, но я бы не принял такое в стандарт
Deleted Account
какой самый некривой способ сделать дефолтное значение в std::map<something, int>, отличное от 0?
у меня есть такой класс, я как раз думал как бы дефолт вернутть, можно возвращать пару где будет флаг валидности значения и значение
Constantine
костыли-костылята
это не костыль, я выше писал, внешние функции - лучшая архитектура
Constantine
то же самое, что key_set в std не запихали, кстати
Deleted Account
ибо -1 это тоже может быть коректным клюдчём в енуме же
Evgenii
это не костыль, я выше писал, внешние функции - лучшая архитектура
почему бы не сделать дефолт опциональным шаблонным параметром
Constantine
потому что map<int, smth> значение типа smth не может быть шаблонным параметром
Constantine
+
Evgenii
ну или параметром конструктора
Evgenii
справедливо
Evgenii
погорячился
Constantine
параметром только конструктора фабрика быть не может, её тип не определен
Anatoly
функция тоже есть, но она модифирующая try_emplace. в С++17 завезли.
Anatoly
пару
Evgenii
как-то некрасиво все равно
Evgenii
☹️
Constantine
а вообще я в архитектуре за унифицированные внешние отглагольные функции) т.е. моя реализация template <typename A, typename V [, ...]> V get_or_default(std::map<A, V> const& mp, A const& a, V v = {}) { auto it = mp.find(a); if (it != mp.end()) return it->second; return v; }
Constantine
вот так, видимо
Anatoly
поскольку, нечаянный m["key"] не вернет -1
Constantine
m["key"] не const
Constantine
но если речь о том, что нужно перекрыть этот случай, выбора кроме агрегации/наследования просто нет
Anatoly
или надо написать "хочешь получить значение мапы, но только через get_or_default"
Constantine
потому что нужно новый тип мапы вывести
Constantine
если это основной способ обращения - пишем type alias через агрегацию
Constantine
больше путей в С++ не завезли
Anatoly
Костя, ну вот есть пример у Страуструпа о подсчете числа вхождения слов. Все лаконично.
Anatoly
Кто-то хочет, чтобы добавление нового ключа через тот же оператор [] приводило к инициализации значения пары определенным значением. Вполне себе легальное желание.
Anatoly
да там все стандартно: std::map<std::string, size_t> m; std::for_each(std::istream_iterator<std::string>(std::in), std::istream_iterator<std::string>(), [&m](auto&& e) { ++m[e.first]; });
Constantine
std::map<std::string, size_t> m; string s; while (cin >> s) ++m[s];
Constantine
типичный олимпиадных исходник
Anatoly
Ребят, так что на счет легальности?
Anatoly
еще можно через аллокатор кастомный, я пример набросал: https://ideone.com/Ui86F6
Constantine
а всякие emplace таким аллокатором не ломаются?
Constantine
на глаз очень не нравится template <typename U, typename...Args> void construct(U* ptr, Args&&... args) { alloc_traits::construct(static_cast<A&>(*this), ptr, std::forward<Args>(args)...); initializer<U>::init(ptr); }
Anatoly
а всякие emplace таким аллокатором не ломаются?
да, emplace таким аллокатором ломается
Anton
Активных тут мало для 1.7к
Berkus
я например пытался восстановить пароль от акка и не смог )
Крылатый
Ща налайкамем!
Крылатый
У меня в загажнике есть 50 проксей.
Ислам
Так, теперь прошу помощи. Откопал я на GitHub одну программу. Для её запуска надо либо прописать в конфиге все необходимые данные, либо запустить с определёнными опциями. Как сделать так, чтобы программа запускалась с моими данными, но ничего никуда прописывать не надо было?
Berkus
прописать их в конфиге
Berkus
для этого он, очевидно, и был придуман
Ислам
Но можно же как-то обойтись без конфига?
Berkus
можно передать в командной строке
Berkus
можешь просто в исходник их забить и скопмилировать так
Ислам
Вот о чём-то похожем я и думал
Ислам
Но я хз, что нужно менять в исходнике
Berkus
я тоже
Ислам
Когда что-то менял — программа не компилилась
Berkus
изи вариант, да
Anatoly
Когда что-то менял — программа не компилилась
Скорее всего исходник защищен, тебе в @supapro
Ислам
Окей, спасибо
Anatoly
Именно она
Vladislav
о, новый стикерпак с РМС, то что нужно!
mr
Ку, почему ошибка?
mr
mr
error: incompatible types in assignment of 'int (*)[10]' to 'int [10][10]'