- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
#include <iostream>
#include <algorithm>
#include <functional>
#include <map>
#include <string>
int main()
{
using namespace std::placeholders;
std::map<std::string, int> karta;
std::vector<std::string> goroda{ "foo", "bar", "foo" };
std::for_each(goroda.begin(), goroda.end(), std::bind(
static_cast<
std::pair<decltype(karta)::iterator, bool>
(decltype(karta)::*)(const decltype(karta)::key_type&, decltype(karta)::mapped_type&&)>
(&decltype(karta)::insert_or_assign),
std::ref(karta),
_1,
std::bind(
std::plus<decltype(karta)::mapped_type>(),
1,
std::bind(
static_cast<decltype(karta)::mapped_type&(decltype(karta)::*)(const decltype(karta)::key_type &)>
(&decltype(karta)::operator[]),
std::ref(karta),
_1))
));
std::cout << "foo: " << karta["foo"] << "\nbar: " << karta["bar"] << '\n';
return EXIT_SUCCESS;
}
gost 24.09.2018 14:17 # 0
guest8 24.09.2018 14:26 # −999
Elvenfighter 24.09.2018 14:44 # +2
gost 24.09.2018 15:21 # 0
guest8 24.09.2018 14:54 # −999
gost 24.09.2018 15:07 # 0
Или даже:
guest8 24.09.2018 15:08 # −999
KaKou-To_xyu 24.09.2018 15:13 # +3
gost 24.09.2018 15:17 # 0
guest8 24.09.2018 16:38 # −999
gost 24.09.2018 16:48 # +1
Проблема в том, что operator[] и insert_or_assign() — перегружены, поэтому нам надо явно задать возвращаемые и принимаемые типы. В коде это делается через приведение к указателю на функцию нужного вида.
Steve_Brown 24.09.2018 18:58 # 0
Хотя, с другой стороны, логичная - при вызове же функция выбирается автоматически по аргументам, ну и тут происходит похожее.
guest8 24.09.2018 20:08 # −999
guest8 24.09.2018 20:19 # −999
guest8 24.09.2018 20:27 # −999
guest8 24.09.2018 20:32 # −999
guest8 24.09.2018 20:36 # −999
guest8 24.09.2018 21:08 # −999
guest8 24.09.2018 21:10 # −999
guest8 24.09.2018 21:21 # −999
guest8 24.09.2018 21:41 # −999
guest8 24.09.2018 20:20 # −999
guest8 24.09.2018 19:10 # −999
gost 24.09.2018 21:02 # 0
В «PHP» нет перегрузки функций, поэтому сделать точный перевод нельзя.
guest8 24.09.2018 15:03 # −999
gost 24.09.2018 15:09 # 0
Elvenfighter 24.09.2018 15:24 # +1
guest8 24.09.2018 20:01 # −999
gost 24.09.2018 21:17 # 0
Подробнее: https://en.cppreference.com/w/cpp/utility/functional/bind
OBEH 24.09.2018 21:47 # 0
gost 24.09.2018 22:03 # 0
OBEH 24.09.2018 22:05 # 0
gost 24.09.2018 22:06 # 0
gost 17.07.2020 19:24 # 0
TEH3OPHblu_nemyx 17.07.2020 19:32 # 0
gost 17.07.2020 19:43 # +1
TEH3OPHblu_nemyx 17.07.2020 19:52 # 0