c++ byta plats på två element
Hej.
Jag håller på att bli tokig!
Håller på med en uppgift som lyder:
"Skriv en funktion för linjär sökning i en vektor p med Person-objekt.
int linsok(Person p[], int n, int a)
Funktionen ska söka igenom vektorn p efter en person med åldern a och returnera index för den personen. Om ingen person hittas returneras -1. Variabeln n är antalet element i vektorn.
Skriv också en funktion som sorterar en Person-vektor efter ålder (yngst först).
void bubblesort(Person p[], int n)
Se pseudokoden för bubblesort och exempel 15.3 på sidan134 i kursboken. För att förenkla kodningen lite grann, använd gärna nedanstående funktion för att byta plats på två element
void byt(Person p, Person q)
{ Person temp;
temp.name = p.name;
temp.age = p.age;
p.name = q.name;
p.age = q.age;
q.name = temp.name;
q.age = temp.age;
}
Alltså vill uppgiften att jag skall sortera familjen efter ålder. Och när jag använder funktionen bubblesort så sorteras åldrarna i rätt ordning. Men jag vill att även namnet skall flyttas med åldern vilket funktionen "byt" skall göra men jag förstår inte hur jag skall använda den... Vore väldigt tacksam för hjälp!
postar min kod nedan:
#include <iostream>
#include <string>
using namespace std;
class Person
{
public:
string name;
int age;
public: setInfo(string _name, int _age)
{
name = _name;
age = _age;
}
};
int linsok(Person p[], int n, int a)
{
for (int i = 0; i < n; i++)
if (p[i].age == a)
{
return i;
}
return -1;
}
void bubblesort(Person p[], int n)
{
for (int i = 0; i < n; i++)
{
int nrLeft = n - i;
for (int j = 0; j < nrLeft; j++)
{
if (p[j].age > p[j + 1].age)
{
int temp = p[j].age;
p[j].age = p[j + 1].age;
p[j + 1].age = temp;
}
}
}
}
void byt(Person p, Person q)
{ Person temp;
temp.name = p.name;
temp.age = p.age;
p.name = q.name;
p.age = q.age;
q.name = temp.name;
q.age = temp.age;
}
int main()
{
Person familj[4];
familj[0].setInfo("Anna", 55);
familj[1].setInfo("Sofia", 22);
familj[2].setInfo("Anders", 56);
familj[3].setInfo("Erik", 12);
cout << "Ange vilken ålder du söker efter: " << endl;
int ageSerch;
cin >> ageSerch;
int index = linsok(familj, 4, ageSerch);
if (index == -1)
cout << "Personen hittades ej!";
else
cout << "Personen du s\x94ker heter " << familj[index].name << " och finns p\x86 index " << index << " i listan." << endl;
for (int i = 0; i < 4; i++)
cout << familj[i].name << " " << familj[i].age << endl;
cout << "Sorterat efter ålder" << endl;
bubblesort(familj, 4);
for (int i = 0; i < 4; i++)
cout << familj[i].name << " " << familj[i].age << endl;
byt(familj,4); // Här försöker jag anropa funktionen byt men får error: could not convert '(person*)(& familj)' from 'Person to 'Person'
}