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
Evgenii
к этому и пришел
Constantine
да, я ключ забыл) можно так, да, но я бы не принял такое в стандарт
Constantine
костыли-костылята
это не костыль, я выше писал, внешние функции - лучшая архитектура
Constantine
то же самое, что key_set в std не запихали, кстати
Deleted Account
ибо -1 это тоже может быть коректным клюдчём в енуме же
Evgenii
Constantine
Constantine
потому что map<int, smth> значение типа smth не может быть шаблонным параметром
Constantine
+
Evgenii
ну или параметром конструктора
Evgenii
справедливо
Evgenii
погорячился
Constantine
параметром только конструктора фабрика быть не может, её тип не определен
Anatoly
функция тоже есть, но она модифирующая try_emplace. в С++17 завезли.
Evgenii
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
Constantine
Anatoly
поскольку, нечаянный m["key"] не вернет -1
Constantine
m["key"] не const
Constantine
но если речь о том, что нужно перекрыть этот случай, выбора кроме агрегации/наследования просто нет
Anatoly
или надо написать "хочешь получить значение мапы, но только через get_or_default"
Constantine
потому что нужно новый тип мапы вывести
Constantine
если это основной способ обращения - пишем type alias через агрегацию
Constantine
больше путей в С++ не завезли
Anatoly
Костя, ну вот есть пример у Страуструпа о подсчете числа вхождения слов. Все лаконично.
Anatoly
Кто-то хочет, чтобы добавление нового ключа через тот же оператор [] приводило к инициализации значения пары определенным значением. Вполне себе легальное желание.
Berkus
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
Constantine
std::map<std::string, size_t> m;
string s;
while (cin >> s) ++m[s];
Constantine
типичный олимпиадных исходник
Evgenii
Anatoly
Ребят, так что на счет легальности?
Anatoly
еще можно через аллокатор кастомный, я пример набросал: https://ideone.com/Ui86F6
Anatoly
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
Stanislav
Anton
Anton
Активных тут мало для 1.7к
Berkus
я например пытался восстановить пароль от акка и не смог )
Крылатый
Крылатый
Ща налайкамем!
Крылатый
У меня в загажнике есть 50 проксей.
Vladislav
Ислам
Так, теперь прошу помощи. Откопал я на GitHub одну программу. Для её запуска надо либо прописать в конфиге все необходимые данные, либо запустить с определёнными опциями. Как сделать так, чтобы программа запускалась с моими данными, но ничего никуда прописывать не надо было?
Berkus
прописать их в конфиге
Berkus
для этого он, очевидно, и был придуман
Ислам
Но можно же как-то обойтись без конфига?
Berkus
можно передать в командной строке
Berkus
можешь просто в исходник их забить и скопмилировать так
Ислам
Вот о чём-то похожем я и думал
Ислам
Но я хз, что нужно менять в исходнике
Berkus
я тоже
Ислам
Когда что-то менял — программа не компилилась
Berkus
изи вариант, да
Ислам
Окей, спасибо
Anatoly
Именно она
Vladislav
о, новый стикерпак с РМС, то что нужно!
mr
mr
mr
error: incompatible types in assignment of 'int (*)[10]' to 'int [10][10]'