如何在Rust中实现类似C++ std::unordered_map的swap交换HashMap内容?
Rust中交换两个HashMap内容的方法
在Rust里,对应C++ std::unordered_map 的容器是 std::collections::HashMap,你可以通过以下两种高效方式实现内容交换,和C++的swap方法一样都是O(1)时间复杂度(仅交换内部指针,不复制元素):
方法1:使用std::mem::swap
这是Rust标准库提供的通用交换工具,适用于所有实现了Default trait的类型,包括HashMap:
use std::collections::HashMap; use std::mem; fn main() { let mut map1: HashMap<i32, &str> = [(1, "a"), (2, "b")].into(); let mut map2: HashMap<i32, &str> = [(3, "c"), (4, "d")].into(); // 交换两个HashMap的内容 mem::swap(&mut map1, &mut map2); println!("map1: {:?}", map1); // 输出 map1: {3: "c", 4: "d"} println!("map2: {:?}", map2); // 输出 map2: {1: "a", 2: "b"} }
方法2:使用HashMap自身的swap方法
HashMap类型直接实现了swap方法,调用更直观:
use std::collections::HashMap; fn main() { let mut map1: HashMap<i32, &str> = [(1, "a"), (2, "b")].into(); let mut map2: HashMap<i32, &str> = [(3, "c"), (4, "d")].into(); // 直接调用HashMap的swap方法 map1.swap(&mut map2); println!("map1: {:?}", map1); println!("map2: {:?}", map2); }
两种方法的效果完全一致,底层都是交换两个容器的内部数据指针,不会对存储的键值对进行任何复制或移动操作,性能和C++的std::unordered_map::swap完全匹配。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

