2016-04-14 11 views
-1

Ich bin relativ neu in C++, und ich brauche einen Rat. Ich werde versuchen, es kurz zu halten. Was ist der einfachste und beste Weg, Integer-Werte nach ihrer Größe zu organisieren? Dann möchte ich diese Informationen verwenden können. Mein Ziel ist im Grunde, ich kann eine ganze Zahl von einer Quelle bekommen, und dann möchte ich die Quellen durch die Größe des Integer-Wertes organisieren, und wenn zwei verschiedene Quellen den gleichen Wert haben, möchte ich, dass das Programm eine Menge Code ausführt. Hoffentlich machte das Sinn.Ganzzahlen nach Größe organisieren?

Jede Hilfe würde sehr geschätzt werden. (von der Größe meine ich den Wert, sorry für die Unannehmlichkeiten)

EDIT: Ich habe keinen Beispielcode leider zu zeigen, aber ich werde versuchen, zu klären, was ich bin auf dem Ziel. Ich möchte die Geschwindigkeit von 2-20 "Charakteren" in einem Spiel vergleichen. Der Schnellste wird im nächsten Teil des Spiels zuerst gehen, gefolgt vom Zweitschnellsten usw. Wenn 2 "Charaktere" die gleiche Geschwindigkeit haben, möchte ich, dass ihre Startposition zufällig ist (zwischen ihnen zwei). Ich habe das meiste in meinem Kopf abgebildet, aber ich habe meistens Mühe herauszufinden, wie man die Geschwindigkeit sortiert und weiß, wer den höchsten Geschwindigkeitswert hat.

+1

Wie nennen Sie die Größe einer Ganzzahl? –

+2

* Hoffentlich hat das Sinn gemacht * Tut mir leid, aber es macht keinen Sinn für mich, was du machen willst. Was meinst du mit Größe? Wert? – NathanOliver

+0

Wenn Sie "Ganzzahlen nach Größe sortieren", meinen Sie das Sortieren? –

Antwort

0
std::sort 

Einfache Nutzung:

// intArray will be replaced by your collection of integers. 
const int SIZE = 7; 
int intArray[SIZE] = {5, 3, 32, -1, 1, 104, 53}; 

std::sort(intArray, intArray + SIZE); 

cout << "Sorted Array looks like this." << endl; 
for (size_t i = 0; i != SIZE; ++i) 
    cout << intArray[i] << " "; 

Dies sollte drucken: -1 1 3 5 32 53 104

Dieser Artikel könnte etwas Hilfe sein, wenn Sie stl neu sind: http://www.cplusplus.com/articles/NhA0RXSz/

+0

Vielen Dank, ich werde es lesen. – Fabian

+2

Das ist ein Kommentar, keine Antwort. – SergeyA

+0

Einverstanden, aber leicht in eine Antwort umgewandelt. Fassen Sie die grundlegenden Punkte des Artikels so zusammen, dass die Antwort immer noch einen Wert hat, wenn sich der Artikel bewegt oder die Host-Site auf den Kopf gestellt wird. – user4581301

0

Wenn die ganzen Zahlen sein müssen Eindeutig (nicht 2 mal die gleiche Ganzzahl im Container) und sortiert, möchten Sie vielleicht eine set

012 verwenden

Der nächste Teil Ihrer Frage ist nicht sehr klar, aber ich werde es trotzdem versuchen. Wenn Sie wissen möchten, ob eine bestimmte ganze Zahl bereits in Ihrem Container ist, ist der beste Weg, durch den Container zu gehen und jedes Element zu testen, um das zu tun, würde ich eher raten, aber da Reihenfolge wichtig ist, würde ich lieber verwenden a set oder priority_queue, aber diese sind ein bisschen komplizierter.

Jetzt gibt es die "Quelle" Teil. Nach Quelle meinen Sie Eingaben von externen Quellen? Ich denke, das meinst du sowieso. Grundsätzlich wollen Sie einen Container, der "Quellen" nach ihren Werten in aufsteigender Reihenfolge speichert, und wenn zwei auf den gleichen Wert kommen, etwas tun.

Die natürlichste und optimalste Methode wäre, Ihre Quellenobjekte zu erstellen und den Operator < in diesen Objekten zu überlasten, und dann können Sie in diesem Operator testen, ob diese Objekte denselben Wert zur Ausführung haben. Haufen Code '.

Hier ein Beispiel:

class Source 
{ 
private: 
    int m_value; // The value of this source 
public: 
    Source(int const& v) // setting the source's value 
    { 
    setValue(v); 
    } 
    int getValue() // Returns the sources value for comparison 
    { 
    return m_value; 
    } 
    int setValue(int const& v) // Sets the source's value 
    { 
    m_value = v; 
    } 

    // ... [Insert other methods here] 

    bool operator<(Source const& s) // Testing which source has the lowest value 
    { 
    if(m_value == s.m_value()) // If their values are equal 
    { 
     // Your code 
    } 
    return (m_value < s.m_value()); // Else we test if the other value's bigger 
    } 
}; 

Und dann können Sie diese speichern in einem set, zum Beispiel.