tengo varias entradas de datos que contienen la siguiente información: id_number nombre1 fecha nombre2C++ de datos dobles de clasificación con múltiples elementos
Es posible poner esto en una estructura como esta:
struct entry {
int id_number;
string name1;
int date;
string name2;
}
En mis datos, tengo muchas de esas entradas y me gustaría ordenarlas. Primero, quiero ordenar alfabéticamente en función de name1, luego ordenar por fecha. Sin embargo, la clasificación por fecha es un subconjunto del orden alfabético, p. si tengo dos entradas con el mismo nombre1, entonces quiero ordenar esas entradas por fecha. Además, cuando ordeno, quiero que los elementos de la entrada permanezcan juntos, por lo que los cuatro valores van juntos.
Mis preguntas son las siguientes:
1) ¿Qué tipo de estructura de datos debería utilizar para mantener estos datos para que pueda mantener el conjunto de cuatro elementos juntos cuando cualquier tipo por cualquiera de ellos?
2) ¿Cuál es la forma más rápida de hacer esta ordenación (en términos de cantidad de tiempo para escribir el código). Idealmente, quiero usar algo como el género en algorithms.h ya que está integrado.
3) ¿STL tiene alguna estructura de datos integrada que pueda manejar la doble clasificación que describí de manera eficiente?
Necesita un tipo estable o esto no funcionará. Voy a renunciar a hacer mi propia respuesta ya que será muy parecida a la tuya, excepto con comentarios sobre cómo std :: stable_sort es realmente muy lenta y otra implementación de tipo de fusión sería mucho mejor porque el mejor y el peor caso son n log n mientras que std :: stable_sort es como ... n log n^2 o algo tonto como ese. Entonces, actualizaría la respuesta para abordar eso, principalmente. Te votaré si lo haces. O explicaré la teoría en mi propia respuesta ... –
@OrgnlDave: no es así. Necesitará una clasificación estable * solo * si ordena * por separado * en los dos campos. Es decir, ordena primero por fecha, luego clasifique por nombre por separado y pretenda que las fechas permanezcan en orden. Esto está haciendo ambas comparaciones a la vez, por lo que un solo tipo (que puede ser inestable) se organiza por nombre y fecha. –
lo siento, pero ese comparador no proporcionará un orden estable –