есть.Я искал свой вопрос здесь, но не смог найти ничего подходящего.Вот в чем проблема.
У меня есть этот код в части моей программы, который выполняет глупую сортировку по вставкам.
Я разработал это в MSVS 2008, и все это работало нормально, но когда я попытался скомпилировать его сg ++, это не удалось из-за функции list::insert
ниже;
//...
pair<uint, double> NewElem(i, Prob.at(i));
bool inserted(false);
vector<pair<uint, double> >::const_iterator li = NewList.begin();
for ( vector<double>::const_iterator ji = BlocksMemory.begin() ; ji != BlocksMemory.end() ; ++ji)
{
if (NewElem.second <= *ji)
li += _SORT_BLOCK;
else
break;
}
for(;li != NewList.end() ; ++li)
{
if (NewElem.second > li->second)
{
NewList.insert(li, NewElem );
inserted = true;
break;
}
}
, как можно видеть, li
равно const_iterator
из NewList
;И NewElem
имеет тип pair
с тем же типом содержимого, что и содержимое NewList
;
Там вы можете увидеть ответ (не читается):
main.cpp: 447: ошибка: нет подходящей функции для вызова "std::vector<std::pair<unsigned int, double>, std::allocator<std::pair<unsigned int, double> > >::insert(__gnu_cxx::__normal_iterator<const std::pair<unsigned int, double>*, std::vector<std::pair<unsigned int, double>, std::allocator<std::pair<unsigned int, double> > > >&, std::pair<unsigned int, double>&)
"
/ usr / include / c ++ / 4.4 / bits / vector.tcc: 106: примечание: кандидаты: __gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> > std::vector<_Tp, _Alloc>::insert(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = std::pair<unsigned int, double>, _Alloc = std::allocator<std::pair<unsigned int, double> >]
/ usr / include / c ++ / 4.4 / bits / stl_vector.h: 850: примечание: void std::vector<_Tp, _Alloc>::insert(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, size_t, const _Tp&) [with _Tp = std::pair<unsigned int, double>, _Alloc = std::allocator<std::pair<unsigned int, double> >]
В чем может быть причина?И какое возможное решение?