2013-10-06 3 views
-2

J'ai un tableau comme ceci:Trier multidisque mais gardez les index de ligne

noms

, état, houseprice, carsprice

john, WI, 200, 100 jimmy, MI, 100, 90 ...

Comment trier le prix de l'immobilier et le prix de la voiture sans changer les éléments de cette même rangée? Comme trier la rangée entière de "John" basé sur leur prix de maison et carprice contre une autre rangée dans le tableau mais garder tout dans la rangée ensemble.

c'est ce que j'ai jusqu'à présent,

for (int i=0;getline(file,(names[i]),',');i++) 
{ 
getline(file, states[i], ','); 

getline(file, houseprice[i], ',') ; 

getline(file, carprice[i]); 
} 

comment je veux trier houseprice et carprice contre une autre ligne sans perdre le nom et les États ainsi que cette ligne.

+0

C++, s'il vous plaît j'ai besoin d'aide. – VKID

+0

Est-ce un tableau 2D? –

+2

N'utilisez pas de tableaux séparés pour chaque colonne, mais un 'vecteur' d'un type agrégé, et le triez avec' std :: sort' avec un comparateur personnalisé. – us2012

Répondre

0

projet Juste le domaine qui vous intéresse dans le cadre de votre objet de fonction de comparaison mais sinon traiter les objets comme une seule unité:

house array[] = { ... }; 
// sort by houseprice; similar for other attributes: 
std::sort(std::begin(array), std::end(array), [](house const& h0, house const& h1) { 
       return h0.houseprice < h1.houseprice; 
      }); 
0

vous devez implémenter un vecteur qui mappe l'ordre « d'origine » au " trié "order,

donc le résultat de l'algorithme de tri sera un vecteur de mappage et la fonction qui dessine la table de sortie doit le dessiner par l'ordre du vecteur de mappage. par exemple, si après triage toutes les lignes restent sur la première position de commande et des lignes seulement 4,5 échange

endroits le vecteur de mappage sera: Index: 0, 1, 2, 3, 4, 5, 6, 7 , ... données: 0, 1, 2, 3, 5, 4, 6, 7, ...

depuis votre question est tout à fait générale - fait donc la réponse

+0

Ummm .... Je n'ai pas appris à utiliser struct, j'ai juste besoin de trier le prix de la maison et le prix de carprice contre un autre prix de maison et de voiture, mais je dois m'assurer que les éléments de nom en triant. – VKID

0

Vous pouvez utiliser un vecteur de struct par exemple:

struct PersonalInfo 
{ 
    string name; 
    string state; 
    int housePriceCents; 
    int carPriceCents; 
} 

std::vector<PersonalInfo> infos; 

Ensuite, utilisez tri avec une fonction de comparaison transmise, ou définissez l'opérateur < dans votre structure, de sorte que les structs avec des prix inférieurs soient considérés comme inférieurs aux structs avec des prix plus élevés.

Questions connexes