The correct type for it is Vec<(String, u64)> or Vec<(Box<str>, u64>).
&str means "this is not a string, it has no data, I'm giving you a temporary permission to see a String I'm keeping elsewhere". But you're not keeping the String anywhere, you throw it away immediately. &str can't exist by itself.
So you will need a two-step process. First make pairs of (String, u64) and then, while a vec of them is holding them and keeping them alive, make another vec that temporarily borrows them.
let owned_strings: Vec<(String, u64)> = …;
let borrowed_strings: Vec<(&str, u64)> = owned_strings.iter().map(|(s, v)| (s.as_str(), *v)).collect();
This is because Rust needs to free every string you created, but without a garbage collector Rust has no way of tracking how many strings exist and which are still needed. Holding them in a Vec makes it possible to track them and free them when they're not needed any more.