Bitwise operators 在优先级队列C+的比较器运算符中使用带1的异或的用例是什么+; 从C++中的STL PrimyItQueQueLead的“CPUPPORY”示例中,我不完全理解这里给出的最后一个例子。 比较器是一个lambda表达式,这很好,但是使用按位异或,每个参数为1,这是我不知道的-它有什么好处

Bitwise operators 在优先级队列C+的比较器运算符中使用带1的异或的用例是什么+; 从C++中的STL PrimyItQueQueLead的“CPUPPORY”示例中,我不完全理解这里给出的最后一个例子。 比较器是一个lambda表达式,这很好,但是使用按位异或,每个参数为1,这是我不知道的-它有什么好处,bitwise-operators,priority-queue,bitwise-xor,Bitwise Operators,Priority Queue,Bitwise 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<ty

下面是代码示例:

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';
}
我可以看到结果是向量成对排序,其中第二个大于第一个,但我不完全理解两件事:

  • 使用1的XOR ing如何获得这种效果?(我有一种感觉,切换第一位使其与8相关,大于9,然后7大于6,以此类推。)
  • 这种订购的用例/应用程序是什么

  • 比较之前只需翻转“奇数”位。谢谢!那么这种比较器的用例又如何呢?
    8 9 6 7 4 5 2 3 0 1