i have a simple [`HashMap`](https://doc.rust-lang.org/std/collections/struct.HashMap.html); say `HashMap<char, char>`.

is there a way to swap two elements in this hashmap using [`std::mem::swap`](https://doc.rust-lang.org/std/mem/fn.swap.html) (or any other method)?

Of course there is the simple way getting the values with [`get`](https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.get) and then replace them with [`insert`](https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.insert) - but that would trigger the hasher twice (once for getting then for inserting) and i was looking for a way to side-step the second hasher invocation (more out of curiosity than for performance).

what i tried is this (in several versions; none of which worked - and as remarked in the comments: `entry` would not do what i expect even if i got this past the compiler):

```
use std::collections::HashMap;
use std::mem::swap;

let mut hash_map: HashMap<char, char> = HashMap::default();
hash_map.insert('A', 'Z');
hash_map.insert('B', 'Y');

swap(&mut hash_map.entry('A'), &mut hash_map.entry('B'));

```

now the compiler complains (an i understand why it should)

```
error[E0499]: cannot borrow `hash_map` as mutable more than once at a time
   --> tests.rs:103:42
    |
103 |      swap(&mut hash_map.entry('A'), &mut hash_map.entry('B'));
    |      ----      --------                  ^^^^^^^^ second mutable borrow occurs here
    |      |         |
    |      |         first mutable borrow occurs here
    |      first borrow later used by call

```

also just getting the two values this way fails in more or less the same way:

```
let mut a_val = hash_map.get_mut(&'A').expect("failed to get A value");
let mut b_val = hash_map.get_mut(&'B').expect("failed to get B value");
swap(&mut a_val, &mut b_val);

```

is there a way to simply swap two entries of a `HashMap`?