Zwei strings sortieren

FSA

Erfahrenes Mitglied
Hallo!
Ich habe einen vector mit folgender Struktur befüllt:
Code:
struct own_s 
{
string s1;
string s2;
};

Als erste möchte ich alphabetisch die strings in s1 sortieren. Kein Problem:
Code:
bool compare(const own_s in1, const own_s in2)
{
	return std::strcmp(in1.s1.c_str(), in2.s1.c_str()) < 0;
}

vector<own_s > v;
// ...
sort(v.begin(), v.end(), compare);
Jetzt habe ich alle strings in s1 alphabetisch sortiert. Jetzt möchte ich aber auch das gleiche bei s2 machen, allerdings soll die Sortierung von s1 nicht zerstört werden! Also quasi nur sortieren, wenn bei den beiden Elementen in der compare-Funktion s1 gleich ist.
Mein Ansatz:
Code:
bool compare2(const own_s in1, const own_s in2)
{
	if(in1.s1!= in2.s1)
	{
		return false;
	}
	return std::strcmp(in1.s2.c_str(), in2.s2.c_str()) < 0;
}
Dieser hat jedoch nicht funktioniert. Die Sortierung von s1 wird teilweise zerstört und die Sortierung von s2 stimmt auch nicht immer.

Wie kann ich das Problem lösen?

Danke im Voraus.
 
Hi,

dein Code hat einen Logikfehler., so müsste es funktionieren:
C++:
bool compare2(const own_s in1, const own_s in2)
{
    // Nur wenn s1 bei beiden gleich ist,
    // gehe nach Sortierung von s2
    if(in1.s1 == in2.s1)
    {
        return std::strcmp(in1.s2.c_str(), in2.s2.c_str()) < 0;
    }
    // Ansonsten bleibe beim Alten
    return std::strcmp(in1.s1.c_str(), in2.s1.c_str()) < 0;
}
 
Zurück