03. Make Company
Чудих се доста време. Доста се рових в нета за този case, но не намерих solution. Дава error no matching function for call to за този ред:
employees.push_back(properties[i][0]), properties[i][1]);
Ето го кода:
#ifndef MAKECOMPANY_H
#define MAKECOMPANY_H
#include <memory>
#include "Company.h"
using namespace std;
shared_ptr<Company> makeCompany(vector<string>& properties)
{
auto id = stoi(properties[0]);
auto name = properties[1];
vector<pair<char, char>> employees;
for(int i = 2; i < properties.size(); ++i)
{
employees.push_back(properties[i][0]), properties[i][1]);
}
return make_shared<Company>(id, name, employees);
}
#endif // !MAKECOMPANY_H
Значи с emplace_back работи. Но с push_back не. Първоначално си мислих че е от компилатора ми. Но се оказва че и в Judge дава същия error. До колкото знам разлика в emplace_back и push_back почти няма. Само дето push_back е малко по бавен защото първо създава обекта, а после го вкарва във вектора, докато emplace_back директно го създава на место. Доста странна грешка. Някой има ли идея защо се получава това? Благодаря предварително!
Много благодаря за разяснението! Добро е и си прав, че са pair от chars. Но за жалост и този вариант не работи при мен, също и Judge е на същото мнение. Не ми се вярва да има чак такава разлика между emplace_back и push_back, че push_back да не може да извърши същата функция
Еrror-а който дава е: error: no matching function for call to 'make_pair(__gnu_cxx::__alloc_traits<std::allocator<char> >::value_type&)'|
Май съм се натъкнал на нещо като pitfall от страна на компилатора ми се струва
Абе аз май съм объркал скобите на make_pair() :) Така е правилно
Пробвах функцията и сработи. Общо взето има разлика между двете. Не само в скоростта (в случая Time: 0.834 s, Time: 0.943 s), а и че push_back не може да му се подават два сурови аргумента без да са pairs, докато при emplace_back може. Определено не бях виждал такова нещо до сега
Много благодаря за съдействието!