Vec<u8>
에서 HashSet<u8>
을 빌드하고 싶습니다. 나는 녹에서 벡터로 HashSet 빌드
2n
메모리,
하지만 내가 얻을 수있는 유일한 일을 사용하여 한 번만 데이터를 복사, 한 줄의 코드에
- 을하고 싶습니다 컴파일은이 정크 조각입니다. 나는 데이터를 두 번 복사하고
3n
메모리를 사용한다고 생각합니다.fn vec_to_set(vec: Vec<u8>) -> HashSet<u8> { let mut victim = vec.clone(); let x: HashSet<u8> = victim.drain(..).collect(); return x; }
나는이 같은 간단한 것을 작성하는 기대했다 :
fn vec_to_set(vec: Vec<u8>) -> HashSet<u8> { return HashSet::from_iter(vec.iter()); }
을하지만 컴파일되지 않습니다 :
error[E0308]: mismatched types --> <anon>:5:12 | 5 | return HashSet::from_iter(vec.iter()); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected u8, found &u8 | = note: expected type `std::collections::HashSet<u8>` = note: found type `std::collections::HashSet<&u8, _>`
을 .. 난 정말 오류를 이해하지 못하는 아마도 RTFM이 필요하기 때문입니다.
코드 및 오류 메시지가 일치하지 않습니다. 'iter()'를 의미해야합니다. – bluss
FYI : 첫 번째 코드에서는 벡터를 복제 할 필요가 없습니다. 변경 가능하다고 선언해야합니다. 'let mut victim = vec; '또는 인수 목록에서'fn vec_to_set (mut vec : Vec)'중 하나를 사용하십시오. –
* O * 표기법을 올바르게 사용하고 있지 않습니다. _O (n) = O (2n) = O (3n) = O (c * n) _. 요점은 상수가 중요하지 않다는 것입니다. 나는 그것이 당신이 의미하는 것이 분명하다고 생각하지만 아마도 "_2n_ memory"또는 그 대신에 뭔가를 말해야 할 것입니다. – Lii