0

从 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. 与 1 进行异或运算如何获得这种效果?(我有一种感觉,切换第一位会使其与 8 相关,大于 9,然后 7 大于 6,等等。)
  2. 这种订购的用例/应用是什么?
4

0 回答 0