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