Multiple mutable references to elements within one vector

try this:

fn get_two_elements<T>(vec: &mut Vec<T>, first: usize, second: usize) -> (&mut T, &mut T) {
    assert!(first < second);
    assert!(second < vec.len());
    if let [first, .., second] = &mut vec[first..=second] {
        (first, second)
    } else {
        unreachable!()
    }
}

or

fn get_elements<'a, T>(vec: &'a mut Vec<T>, indexes: &[usize]) -> HashMap<usize, &'a mut T> {
    // indexes must be ordered
    let mut map = HashMap::new();
    let mut vec_ref = vec.as_mut_slice();
    let mut skipped_count = 0;
    for i in indexes {
        let start = *i - skipped_count;
        vec_ref = &mut vec_ref[start..];
        skipped_count += start;
        if let [first, rest @ ..] = vec_ref {
            map.insert(*i, first);
            vec_ref = rest;
            skipped_count += 1;
        } else {
            break;
        }
    }
    map
}