为什么我不能简单地覆盖<在对的优先级队列中?

ple*_*ora 2 c++ priority-queue

我知道我可以做priority_queue < P, vector<P>, Compare > queue;,哪里Compare是仿函数.但是,由于默认比较器是less<P>,并且它是相同的<,为什么当我执行以下操作时它不起作用:

typedef pair<int, int> P;

bool operator<(const P& a, const P& b){   
    return (a.second < b.second);                                    
} 

int main(int argc, char const *argv[]){
    int vec[] = {3, 6, 7, 8, 1, 2}; // just for testing
    priority_queue <P> queue;
    for(int i = 0; i < 6; ++i){
        queue.push(make_pair(i, vec[i]));   
    }
    cout << queue.top().second << endl; // returns 2
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Bo *_*son 6

std::pair已经有一个operator<声明的内部命名空间std.

因为它位于相同的命名空间中pair,所以 std::less会首先找到那个,然后再看不进一步.