我正在使用
typedef pair < long , pair <bool ,long > > t;
vector <t> time ;
我需要使用std::sort()
函数对上面的矢量进行排序,但需要使用自定义的比较函数。我写了一个版本,但工作不正常。你能指出我的错误吗?
bool comp ( const t &a , const t &b){
if ( a.first < b.first)
return a.first > b.first ;
else if ( b.first < a.first )
return b.first > a.first ;
else if ( a.first == b.first )
{
if ( a.second.first == false && b.second.first == true)
return a.first > b.first ;
else if ( a.second.first == true && b.second.first == false)
return b.first > a.first ;
else
return a.first > b.first ;
}
}
inside main(){
sort ( time.begin() ,time.end() ,comp) ;
}
自定义案例:
排序前:矢量时间
10 1 1
100 0 1
100 1 2
200 0 2
150 1 2
500 0 2
200 1 2
300 0 2
排序后:
10 1 1
100 0 1
100 1 2
150 1 2
200 0 2
200 1 2
300 0 2
500 0 2
答案 0 :(得分:3)
应该是:
if ( a.first < b.first)
return true
else if ( b.first < a.first )
return false;
// etc.
在您的版本中,它在两种情况下都会返回false。
答案 1 :(得分:1)
您的比较功能没有定义排序。事实上,
它似乎随时都会返回a.first != b.first
。
我不确定你想要什么样的自定义订单。标准 std :: pair的排序将导致类似:
bool
comp( t const& a, t const& b )
{
if ( a.first != b.first )
return a.first < b.first;
else if ( a.second.first != b.second.first )
return a.second.first < b.second.first;
else
return a.second.second < b.second.second;
}
实际上它有点复杂,因为唯一的比较
它使用的运算符是<
。但如果<
和!=
都是。{
可用,并且表现正常,结果与
以上。
你可以轻松地采用它来比较任何元素
你想要的订单;如果你想反转其中一个的顺序
元素,只需将<
替换为>
。
最后,false
比布尔值小于true
值。