gpt4 book ai didi

rust - 如何克隆包含盒装特征对象的 HashMap?

转载 作者:行者123 更新时间:2023-11-29 08:04:00 25 4
gpt4 key购买 nike

我有带有自定义哈希器的 HashMap。此 HashMap 的项目没有实现特征 Clone(这是一个特征),但有克隆项目的功能,如下所示:

use std::collections::HashMap;
use std::hash::BuildHasherDefault;

use fnv::FnvHasher;

trait Item {
fn get_id(&self) -> i32;
fn cloned(&self) -> Box<Item>;
}

#[derive(Clone)]
struct ItemImpl {
id: i32,
foo: i32
}

impl Item for ItemImpl {
fn get_id(&self) -> i32 { self.id }
fn cloned(&self) -> Box<Item> { Box::new(self.clone()) }
}

fn main() {
let hash_map = HashMap::<i32, Box<Item>, BuildHasherDefault<FnvHasher>>::default();
}

如何快速(在代码中)高效地(不创建临时集合)克隆 hash_map

最佳答案

您可以为装箱特征对象本身实现Clone:

impl Clone for Box<Item> {
fn clone(&self) -> Self {
self.cloned()
}
}

现在您可以克隆 HashMap。请注意,自定义哈希与问题无关。

另见

关于rust - 如何克隆包含盒装特征对象的 HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39120183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com