从 C++ (link)中 STL priority_queue 的“cppreference”示例中,我不完全理解那里给出的最后一个示例。比较器是一个 lambda 表达式,一切都很好,但是对于每个参数使用 1 的按位 XOR 是我不明白的——它有什么用?
这是代码示例:
auto cmp = [](int left, int right) { return (left ^ 1) < (right ^ 1);};
std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);
for(int n : {1,8,5,6,3,4,0,9,7,2})
q3.push(n);
print_queue(q3);
template<typename T> void print_queue(T& q) {
while(!q.empty()) {
std::cout << q.top() << " ";
q.pop();
}
std::cout << '\n';
}
输出:
8 9 6 7 4 5 2 3 0 1
我可以看到结果是向量成对排序,其中第二个大于第一个,但我不完全理解两件事:
- 与 1 进行异或运算如何获得这种效果?(我有一种感觉,切换第一位会使其与 8 相关,大于 9,然后 7 大于 6,等等。)
- 这种订购的用例/应用是什么?