std :: swap错误分配只读引用

时间:2014-07-23 09:20:49

标签: c++ stl

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'|

编辑:此功能的目的是安排地图的元素。根据second.type

1 个答案:

答案 0 :(得分:7)

对于密钥,

std::map迭代器始终常量(考虑一下,如果更改密钥值,底层树可能会被破坏!),您可以交换值但是:

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

免责声明:这可能是您正在寻找的,也可能不是,因为我不知道交换的目的是什么。