У меня проблема с созданием std::map<int, int>
из вектора указателей, который называется files
. Каждый указатель указывает на объект с тремя переменными-членами, одна из которых size
типа int
. Ключом карты будет size
, а значением будет количество объектов с одинаковым size
.
НЕ тратьте свое время на второй! Это следующий шаг в моей программе, и я уже понял это, я думаю. Для инициализации карты я использую std::accumulate
, потому что она возвращает значение. Я использую std::tr1::shared_ptr
для указателей и лямбда-выражения для функции предиката. У меня проблемы с компиляцией.
Вот фрагмент кода:
map<int,int>* sizes = new map<int,int>();
sizes = accumulate(files.begin(), files.end(),sizes,
[&sizes](map<int,int> acc, shared_ptr<CFileType>& obj)
{
return sizes->insert(pair<int,int>(obj->getSize(),0));
});
Вот ошибка:
ошибка C2664: 'std :: pair <_Ty1, _Ty2> `anonymous-namespace' :::: operator () (std :: map <_Kty, _Ty>, std :: tr1 :: shared_ptr &) const ' : невозможно преобразовать параметр 1 из 'std :: map <_Kty, _Ty>' в 'std :: map <_Kty, _Ty>'
Я не очень уверен, что перейти к лямбда-функции. Я пробовал с pair<int, int>
, но это не сработало. Также я должен упомянуть, что эта карта возвращается другой функции, поэтому она должна быть указателем.
Любая помощь от вас будет оценена. Спасибо!
UPDATE:
Проблема решена, вот решение:
map<int,int>* sizes = accumulate(files.begin(), files.end(), new map<int,int>(),
[](map<int,int>* acc, shared_ptr<CFileType>& obj)->map<int,int>*
{
acc->insert(pair<int,int>(obj->getSize(),0));
return acc;
});