template<class T>
map<T,int> counter(vector<T> a)
{
map<T,int> b;
pair<map<T,int>::iterator ,bool> pos; //This line shows compiler message
for(int i=0;i<a.size();++i)
{
pos=b.insert(make_pair(a[i],1));
if(!(pos.second))
{
b[pos.first -> first]++;
}
}
return b;
}
Это код с использованием шаблонов.Я хотел разработать функцию, которая принимает вектор любого типа и возвращает карту (аналогично счетчику в python)
map<int,int> counter(vector<int> a)
{
map<int,int> b;
pair<map<int,int>::iterator ,bool> pos;
for(int i=0;i<a.size();++i)
{
pos=b.insert(make_pair(a[i],1));
if(!(pos.second))
{
b[pos.first -> first]++;
}
}
return b;
}
Это функция, если я переписываю только целые числа. Целый код работает нормально, а первый - нет. Можете ли вы объяснить мне, почему это происходит, и как я могу его изменить, поэтому я работаю для каждого типа данных?
Не видя, какие ошибки вы получаете (при размещении вопросов о ошибке сборки всегда включайте полный журнал сборки, полный и неотредактированный), но я предполагаю, что вы должны прочитать [Где и почему мне нужно поставить «шаблон» и Ключевые слова «typename»?] (Http://stackoverflow.com/questions/7923369/when-is-the-typename-keyword-necessary) –