libreria funciona español diccionarios como c++ stdvector stdmap stdset

funciona - stl c++ español



ventajas de std:: set vs vectores o mapas (5)

Esta puede ser una pregunta estúpida, soy bastante nuevo en C ++ y en la programación en general. Deseo entender el uso de varios contenedores STL y con esto en mente, me preguntaba cuáles son las ventajas de usar std :: set vs, por ejemplo, usando vectores o mapas. Parece que no puedo encontrar una respuesta explícita a esta pregunta. Noté que los conjuntos usan mapas, pero ¿por qué no siempre usar mapas o usar conjuntos? En cambio, se proporcionan 2 contenedores bastante similares. Gracias por adelantado.


Ningún cuerpo ha mencionado los hechos que std::set es realmente inmutable. No debe cambiar el valor de ningún elemento en él. std::set no realiza un seguimiento de los cambios, por lo tanto, cuando edita un elemento, va detrás de su parte posterior y es probable que cambie su orden interno. Este es un comportamiento arriesgado. Por lo tanto, use std::map si desea editar elementos después de colocarlos en el contenedor. Asegúrese de utilizar la key para inducir el pedido y todo lo que necesita cambiar posteriormente en value .


Se trata de las garantías de complejidad más deseadas para su aplicación, con respecto a la inserción, eliminación, recuperación, etc. Recomiendo encarecidamente STL eficaz de Scott Meyers .


un conjunto es útil para almacenar cosas únicas como una enumeración para "typeOfFruits"

std::set<typeOfFruits> fruits; fruits.insert (banana); fruits.insert (apple); fruits.insert (pineapple); //it''s fast to know if my store sells a type of fruit. if (fruits.find (pear) == fruits.end()) { std::cout<<"i don''t have pear"; }

un mapa es útil para almacenar cosas únicas, más un ''valor''

std::map<typeOfFruits, double /*unit price*/> fruits; fruits[banana] = 1.05; fruits[apple] = 0.85; fruits[pineapple] = 3.05; //repeating pineapple will replace the old price (value) fruits[pineapple] = 3.35; //it''s fast to know how much a fruit costs. std::map<typeOfFruits, double /*unit price*/> itr = fruits.find(pineapple); if (itr != fruits.end()) { std::cout<<"pineapples costs: $" <<itr->second; }

un vector es útil para almacenar cosas donde se ordena la secuencia (push_back ()). imagine que está escaneando sus frutas en el proceso de pago, y el programa sigue este escaneo.

std::vector<typeOfFruits> fruits; fruits.push_back(apple); fruits.push_back(apple); fruits.push_back(apple); fruits.push_back(banana); fruits.push_back(banana); fruits.push_back(pineapple); //i scanned 3 apples, 2 bananas and 1 pineapple.


std::set y std::map son contenedores asociativos. La diferencia es que std::set s solo contiene la clave, mientras que en std::map hay un valor asociado. Elegir uno sobre el otro depende principalmente de lo que es la tarea en cuestión. Si desea construir un diccionario de todas las palabras que aparecen en un texto, puede usar std::set<std::string> , pero si también desea contar cuántas veces apareció cada palabra (es decir, asociar un valor) a la clave), entonces necesitaría un std::map<std::string,int> . Si no necesita asociar ese conteo, no tiene sentido tener el int que es innecesario.


  • vector es más rápido para inserciones y eliminaciones en la parte posterior del contenedor. Puede acceder a los elementos a través del operador [].
  • dequeue es similar al vector pero presenta inserción frontal y eliminación.
  • set solo tiene la clave, mientras que el map tiene un pair . Ambos contenedores son más rápidos para la inserción y eliminación en el medio del contenedor. También puede acceder a elementos a través de find con los algoritmos STL.