std :: swap ошибка присваивания ссылки только для чтения

0
void sort_this(std::map<BITMAP*,MAPS>::iterator  start,std::map<BITMAP*,MAPS>::iterator endd)
{
    for(auto itt=start;itt!=endd;itt++)
    {               
        for(auto it=start;it!=endd;it++)
        {        
            if(itt->second.type > it->second.type)
            {                                
                std::swap(*it,*itt);
            }                
        }        
    }       
}

мне нужно поменять *it и *itt, он дает эту ошибку.

files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\move.h|177|
error: assignment of read-only reference '__a'|
c:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\move.h|178|
error: assignment of read-only reference '__b'|

edit: Цель этой функции - упорядочить элементы карты. согласно второму типу.

  • 0
    Вы не можете поменять пару с другой, принадлежащей другой карте, вы можете поменять местами элементы карт
Теги:
stl

1 ответ

7

std::map iterators всегда постоянны в отношении ключей (подумайте об этом, если вы измените значение ключа, которое разрушает базовое дерево!), вы можете поменять значения:

std::swap(it->second, itt->second);

Отказ от ответственности: это может быть или не быть тем, что вы ищете, поскольку я не знаю, какова цель обмена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню