首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

高手请来指点一下,关于equal_range等解决思路

2012-02-19 
高手请来指点一下,关于equal_range等typedefpair string,doubleNAMED_VALUEtypedefvector NAMED_VALUE

高手请来指点一下,关于equal_range等
typedef   pair <string,   double>   NAMED_VALUE;
typedef   vector <NAMED_VALUE>   WS;
inline   bool   Equal(   const   NAMED_VALUE   &v1,   const   NAMED_VALUE   &v2   )
{
        return   (v1.first   ==   v2.first);
}

WS   ws;
......//按从小到大的顺序给ws加入若干内容
pair <vector <NAMED_VALUE> ::iterator,   vector <NAMED_VALUE> ::iterator>   range;
range   =   equal_range(ws.begin(),   ws.end(),   pair <string,   double> (name,   0.0),   Equal);
这样得到的range.first与name的值并不相等不知是为什么,有时是name的下一个NAME_VALUE,有时就找不到,于是指向ws.begin()。


[解决办法]
equal_range(itbegin, itend, Val, Op)要求元数是按Op排序的.
楼主按从小到大的顺序给ws加入若干内容, 相当于ws是按从小到大的顺序排序的,
那么, 楼住提供给equal_range的Op就应该实现相应的小于比较, 但是Equal(..)
却是判断元数是否相等,根本没有大小比较的概念, 所以你得到的结果当然不对.
除非你的Equal改成这样:

inline bool Equal( const NAMED_VALUE &v1, const NAMED_VALUE &v2 )
{
return (v1.first < v2.first);
}

热点排行