0

C++ (リンク)の STL priority_queue の「cppreference」の例から、そこにある最後の例を完全には理解していません。コンパレータはラムダ式であり、これはすべて問題ありませんが、各引数に 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

結果は、ベクトルがペアでソートされ、2 番目が最初のものよりも大きいことがわかりますが、2 つのことを完全には理解していません。

  1. 1 を XOR すると、どのようにこの効果が得られますか? (最初のビットを切り替えると、8 が 9 よりも大きく、次に 7 が 6 よりも大きい、などと関連付けられるという感覚があります。)
  2. そのような注文のユースケース/アプリケーションは何ですか?
4

0 に答える 0