You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:55:17