W
Moppel schrieb:
Dies ist also auf den ersten Blick eine Sortierung der Länge nach. Bezieht man aber die anderen Wörter mit ein, so ist durchaus eine lexikographische Ordnung erkennbar (siehe mein Beispiel aus der Aufgabenstellung: a, b, ab, ba, abb, baa, bab, baba, babaa).
Man könnte also sagen, eine lexikographische Ordnung unter Beachtung der Länge (oder so ähnlich ).
Na ja, ich verstehe: eine Sortierung nach der Größe unter Beachtung der lexikographischen Ordnung. Noch ein Tipp dazu: in C++ kannst Du das Ordnungskriterium für einen std::set selber festlegen. Man definiert z.B. einen Funktor mit einem Ordnungskriterium Deiner Wahl und diesen Typ gibst Du als 2.Template-Argument an. Dann werden die Teilstrings wie gewünscht in den set geschrieben.
Beispiel:
#include <algorithm> // copy
#include <iterator> // ostream_iterator
#include <set>
#include <string> // string
struct SizeComparator
{
bool operator()( const std::string& a, const std::string& b ) const
{
if( a.size() == b.size() ) // bei gleicher Länge
return a < b; // .. entscheidet die lexikographische Ordnung
return a.size() < b.size(); // sonst die kurzen nach vorne
}
};
int main()
{
using namespace std;
set< std::string, SizeComparator > s; // Ordnungs-Funktor mit angeben
s.insert( "ab" );
s.insert( "a" );
s.insert( "b" );
copy( s.begin(), s.end(), ostream_iterator< string >( cout, " " ) );
cout << endl;
return 0;
}
.. lass den SizeComparator einfach mal weg, dann siehst Du den Unterschied.
Gruß
Werner