在使用std::sort( first, last, Pred )的时候,第三个参数我想用自定义的比较函数。可是,我遇到了一下问题,在线求指导。
1 template< typename T > 2 void fun() 3 4 { 5 map< T, uint > data_count; //映射数据-出现次数 6 vector< T > data; //数据集 7 struct _less_by_count{ 8 bool operator()( const T& lhs, const T& rhs ) 9 { 10 if( data_count.at( lhs ) < data_count.at( rhs ) ) 11 return true; 12 return false; 13 } 14 }; 15 std::sort( data.begin(), data.end(), _less_by_count() ); 16 }
我想以每个数据的出现次数为排序规则,而data_count却为一个临时变量,编译错误:operator()不能访问data_count!
求助解决方案:以data_count.second为排序规则(不要将data_count设计为全局变量,保留其局部性)。
谢谢!!!!!!!!!!
已解决。
1 template< typename T > 2 void fun() 3 { 4 map< T, uint > data_count; 5 vector< T > data; 6 7 struct _less_by_count{ 8 map< T, uint >* _pdc; 9 _less_by_count( map< T, uint >* pdc ): _pdc( pdc ) { } 10 bool operator()( const T& lhs, const T& rhs ) 11 { 12 if( _pdc->at( lhs ) < _pdc->at( rhs ) ) 13 return true; 14 return false; 15 } 16 }; 17 18 std::sort( data.begin(), data.end(), _less_by_count( &data_count ) ); 19 }