es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo derivar Clone y Copy en Struct con un Vector de enteros?

Siento que este problema tal vez requiera una simple anotación de rasgo, pero estoy atascado/a. Quiero crear clones de estas estructuras durante la otra parte del programa.

use std::collections::HashMap;

#[derive(Debug, Copy, Clone)]
struct NodeMap {
    map: HashMap<usize, node="">,
}

#[derive(Debug, Copy, Clone)]
struct Node {
    destinations: Vec<usize>,
    visits_left: usize,
}

Todo debería ser clonable. Pero dice que Vec<usize> ni HashMap<usize, node=""> implementan Copy. Debo estar omitiendo algo porque parece que esto no debería ser un problema.</usize,></usize,>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo ejecutar código, pero puedo darte algunas indicaciones sobre cómo abordar este problema.

    Tienes razón en que la implementación de Copy no está hecha para Vec<usize> y HashMap<usize, node="">. Sin embargo, aún puedes clonarlos usando el método clone. Aquí tienes lo que puedes hacer:

    Primero, elimina las implementaciones de los traits Copy y Clone de las estructuras NodeMap y Node.

    use std::collections::HashMap;
    
    struct NodeMap {
        map: HashMap<usize, node="">,
    }
    
    struct Node {
        destinations: Vec<usize>,
        visits_left: usize,
    }
    

    Luego, cuando quieras crear una clonación de una instancia de NodeMap o Node, llama al método clone en los campos de tipo Vec y HashMap. Aquí tienes un ejemplo:

    let node = Node {
        destinations: vec![1, 2, 3],
        visits_left: 5,
    };
    
    let map = HashMap::new();
    map.insert(1, node.clone());
    
    let node_map = NodeMap {
        map: map.clone(),
    };
    
    let node_map_clone = node_map.clone();
    

    En este ejemplo, primero creamos una instancia de Node y la insertamos en un HashMap. Luego, creamos una instancia de NodeMap con ese HashMap. Finalmente, creamos una clonación de la instancia de NodeMap.

    Ten en cuenta que llamar a clone en un Vec o HashMap realizará una copia profunda de su contenido, que es lo que deseas en este caso.</usize,></usize,>

Comments are closed.