2011-01-10 8 views
2

Ich habe verschiedene Ansätze in anderen Sprachen gesehen, wie dies zu tun ist, aber es scheint wie ein allgemein genug Problem, dass es scheint, dass es eine Standardmethode sein sollte, dies zu tun.Reduziere Bereiche von Doppel in C++

Ich möchte eine Liste von Float-Bereichen auf seine kleinste Darstellung reduzieren.

2.45-3.72 3.16-6.55 7.23-8.96 8.95-10.27

würde:

2.45-6.55 7.23-10.27

Gibt es eine Funktion oder eine Bibliothek in C++ irgendwo dass ich meine Liste geben kann, und es wird die Reduzierung für mich durchführen? Ich könnte leicht mein eigenes schreiben, aber warum, wenn es schon existiert?

+5

Das scheint nicht ein sehr häufiges Problem zu sein (ich habe es nie mindestens), und es ist definitiv nicht etwas, was Sie erwarten würden, in der Standardbibliothek zu finden (obwohl es in einer Drittanbieter-Bibliothek sein kann, ich weiß nicht) –

+0

es existiert nicht, aber da es einfach ist, Ihre eigenen zu schreiben, warum zu fragen? –

+0

Der Code, um dieses Problem tatsächlich zu lösen, wäre interessant zu schreiben, obwohl es nicht wirklich so schwer ist. Klingt nach einer guten Interviewfrage. – Omnifarious

Antwort

2

Ton einfach:

  • Start mit Liste der Bereiche
  • ließ aktuellen = erster Bereich in der Liste
  • während es ein nächster Bereich nach aktuellen:
    • wenn nächste überlappt aktuellen:
      • verlängern aktuellen auch nächsten
      • entfernen nächste aus der Liste
    • anderes enthalten:
      • Voraus aktuellen ein vorwärts

Das sollte den Trick tun.

+0

Das setzt voraus, dass die Bereiche sortiert sind, was in der Frage nicht angegeben wurde (aber ja, es funktioniert für das eine Beispiel) – MSalters

1

Ich glaube nicht, dass es eine Lösung durch den Standard geben wird, es ist viel zu spezifisch.

+0

Was ist mit Boost? Oder eine andere Bibliothek ...? – NielW

+1

@NielW: Wenn Sie über Boost wissen, überprüfen Sie es selbst. Es ist nicht meine Aufgabe, Informationsquellen zu überprüfen, die Sie bereits kennen. – Puppy

+1

@DeadMG Boost ist groß und einschüchternd und kann schwierig sein, die Funktionen zu finden, die Sie suchen. Vielleicht kann jemand, der mit dem Problem vertraut ist, ihn direkt darauf hinweisen. Sie könnten auch gesagt haben, "Wenn Sie über Google wissen, überprüfen Sie es selbst". Es ist nicht unsere Aufgabe, irgendwelche Fragen hier zu beantworten. –

2

Boost hat eine interval library. Dies enthält nicht explizit genau das, was Sie brauchen, aber es könnte es einfacher machen, es zu schreiben.

Wenn ich mir die Dokumentation ansehe, macht es mir Sorgen, dass die Bibliothek nicht versucht, Sie klar zwischen geschlossenen und offenen Intervallen unterscheiden zu lassen. Aber das ist vielleicht nicht wichtig für Ihren Zweck.