fertige Vergleichsfunktion aus STL für Arrayinhalt ?

smallone

Mitglied
Hallo Experten,

wer kennt eine Funktion der STL oder, was natürlich auch geht, wer hat eine Idee, wie ich aus einem Array, z.B.

[0] 18
[1] 18
[2] 16
[3] 10
[4] 22
[5] 1
[6] 22


1.) herausfinde, ob gleiche Werte vorhanden sind
und wenn das zutriff,
2.) wieviele Werte gleich sind, und
3.) den Index, an dem die gleichen Werte stehen, zurückgegeben bekomme


Das Array ist in Natura sehr viel größer... und nicht sortiert ...


Bei dem Wort sortiert fällt mir ein: Wenn ich nach dem Wert absteigend sortiere und den Index dabei mit umschichte, müßte ich ja durch iterativen Vergleich hintereinanderligender Werte auch irgendwie an die Indizes der gleichen Werte herankommen... gibts da schon fertige STL - Funktionen für ?

VIelen Dank für eure Hilfe !

Gruß BEN
 
moin


Fertig gibt es sowas meines wissens nach nicht.
Das zählen wie oft eine Zahl vorkommt könntest du folgender maßen machen.

Code:
#define MAX_ZAHL 1250 // höchste mögliche vorkommende Zahl

int zahlenzaehlen[MAX_ZAHL];

for(int i=0; i < größe von array mit zahlen; i++)
{
     zahlenzaehlen[arraymitzahlen[i]]++;
}

Ist natürlich nciht lauffähig, aber so im Prinzip zählst du wie oft welche Zahl vorkommt.


mfg
umbrasaxum
 
Ich bin gerade etwas übermüdet und hab auch keine Lust nachzugucken, aber könnte sowas nicht vielleicht sogar mit einem Vektor etwas leichter gehen? Müssen das unbedingt arrays sein?
Natürlich könnte man auch theoretisch das komplette Array sortieren und dann einfach durchgehen was mehrfach da ist und da halt entsprechend zurückgeben, ist aber vermutlich nciht sooo effektiv
 
Aylon hat gesagt.:
Ich bin gerade etwas übermüdet und hab auch keine Lust nachzugucken, aber könnte sowas nicht vielleicht sogar mit einem Vektor etwas leichter gehen? Müssen das unbedingt arrays sein?
Natürlich könnte man auch theoretisch das komplette Array sortieren und dann einfach durchgehen was mehrfach da ist und da halt entsprechend zurückgeben, ist aber vermutlich nciht sooo effektiv


Hallo,

nein, es muß kein Array sein, ich muß nur in irgendeiner Art den Inhalt (ähnlich meines Beispiels) zwischenspeichern und herausfinden, ob ein Eintrag mehrmals vorkam und welcher Index ihm zugeordnet ist.

Hintergrund ist die Dekodierung einer mit Lauflängenkomprimierung übertragenen Nachricht (ähnlich Fax)...

Zu Vektoren bietet die STL doch wieder sehr viel, oder ?
Kennt sich jemand damit aus ?

Danke, Gruß BEN
 
Da die Algorithmen der STL ohnehin grundsätzlich Iteratoren als Parameter erwarten, ist es eigentlich wurscht, ob ein std::vector oder ein Array verwendet wird.

Mir fällt allerdings auch kein Algorithmus ein, der speziell die geforderte Aufgabe erledigt.
 
Mein erster Gedanke gestern war eigentlich das ding zu sortieren und dann zu gucken wenn ein Element gleich dem nächsten ist musst du ja nur den index des ersten und letzten gleichen Elementes haben daraus kannst du ja die Anzahl errechnen und weisst dann alle Indizes.
Aber eien vorgefertigte Lösung wüßte ich jetzt auch nciht.

Edit:
Ich hab hier jetzt aml ein bisschen zusammengefuscht, also dieser Ansatz läuft nur für ein mehrfaches Element, aber vielleicht wird das Prinzip ja klar mann muss sich eben nur ncoh immer das erste Element und die Anzahl spreichern oder sowas in der Art und das halt für das ganze Array machen so das man immer wenn man mehrere gleiche Elemente gefunden hat das jedesmal speichert.

Code:
int main() {
  int A[] = { 2, 0, 4, 6, 0, 3, 1, 0, -7 };
  const int N = sizeof(A) / sizeof(int);
  int c=0;
  sort(A,A+N);
  for(int i=0;i<N-1;i++)
    if(A[i]==A[i+1])
      c= count(A, A + N, A[i]);

  cout << "Anzahl der Nullen: " 
       << c
       << endl;
}
Ich hoffe mal es war überhaupt verständlich was ich jetzt sagen wollte.
Achja das ist jetzt eigentlich nur mal ein ungetester gedanklicher Ansatz, wie gesagt müsste man noch etwas ausführen und für Fehlerfreiheit kann ich da auch ncith garantieren und auch ncith für eine super Performance.
 
Zuletzt bearbeitet:
Zurück