tengo que modificar un objeto que ya se ha insertado en un conjunto. Esto no es trivial porque el iterador en el par devuelto por una inserción de un solo objeto es un constante iterativo y no permite modificaciones. Por lo tanto, mi plan era que si una inserción no pude copiar ese objeto en una variable temporal, la borra del conjunto, modificar localmente y luego insertar mi versión modificada.Cómo garantizar una mejor eficiencia volver a insertar en juegos en C++
insertResult = mySet.insert(newPep);
if(insertResult.second == false)
modifySet(insertResult.first, newPep);
void modifySet(set<Peptide>::iterator someIter, Peptide::Peptide newPep) {
Peptide tempPep = (*someIter);
someSet.erase(someIter);
// Modify tempPep - this does not modify the key
someSet.insert(tempPep);
}
Esto funciona, pero yo quiero hacer mi inserción más eficiente. Intenté hacer otro iterador y configurarlo igual a someIter en modifySet. Luego, después de eliminar algo más, todavía tendría un iterador en esa ubicación del conjunto y podría usarlo como la ubicación de inserción.
void modifySet(set<Peptide>::iterator someIter, Peptide::Peptide newPep) {
Peptide tempPep = (*someIter);
anotherIter = someIter;
someSet.erase(someIter);
// Modify tempPep - this does not modify the key
someSet.insert(anotherIter, tempPep);
}
Sin embargo, esto resulta en una falla seg. Espero que alguien me pueda decir por qué esta inserción falla o sugerir otra forma de modificar un objeto que ya se ha insertado en un conjunto.
El código fuente completo se puede ver en github.
Tiene que ser más eficiente, ha cronometrado su método. ¿El usuario nota un problema de velocidad? –
Sí, cada paso de velocidad es importante en este proyecto. Pero, como dije, mi intento de acelerar las cosas con una inserción más inteligente falló, así que no puedo cronometrar ese método. – lashleigh