高手请来指点一下,关于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);
}