2016-07-17 8 views
-1

Ich möchte eine große Anzahl von Paaren (ca. 10^7 Paare) in einem Container speichern. Die Operationen, die ich ausführen möchte, sind nur insert und find.Was ist der Unterschied in der Leistung von Std :: Set <Paar <int,int>> und Std :: Map <int,int>

Da wir std::set und std::map verwenden können, um Paare zu speichern, möchte ich wissen, welcher Container in Bezug auf Geschwindigkeit besser ist. Ich suchte nach ähnlichen Fragen, fand aber keine Antwort. so wenden Sie sich bitte jemand meine Frage beantworten ......

+4

Wenn Leistung, wenn Ihr Ziel, und das sind die einzigen Operationen, die Sie ausführen, und Sie * nicht * in Anbetracht einer [** 'unordered_map' ** **] (http://en.cppreference.com/w/cpp/container/unordered_map), schlage ich demütig vor, Sie überdenken, da es sehr wahrscheinlich * entweder * der anderen Optionen übertreffen wird. – WhozCraig

+0

Wenn Sie Wert auf Leistung legen, sollten Sie messen. Und denken Sie an den zusätzlichen Code, der geschrieben und verwaltet werden muss, damit sich das Set wie die Karte verhält. – juanchopanza

+5

Eine Karte von was? 'Karte '? Dieser Container würde einen ganz anderen Zweck haben, um das Paar > 'zu setzen. –

Antwort

1

std::pair<int, int> hat Betreiber weniger was für einen Unterschied zwischen den zweiten Werten macht, auch (so wird es in std::set<std::pair<int, int>> verwendet werden), während std::map tut nichts mit dem zweiten Wert. Im Ergebnis bedeutet dies:

std::map<int, int> m; 
std::set<std::pair<int, int> > s; 
m.insert(std::make_pair(0, 0)); 
m.insert(std::make_pair(0, 1)); // it won't be inserted as key is duplicated 
s.insert(std::make_pair(0, 0)); 
s.insert(std::make_pair(0, 1)); // it will be inserted 

Update: In den meisten der STL-Implementierungen set und map Implementierungen sind gleich (symmetrisch RB Baum, in der Regel set und map kam aus derselben Vorlage Basisklasse), in Ihrem Fall nur die Art und Weise die Verwendung von Operator weniger wird der Unterschied sein.

+1

Stimmt, aber beantwortet die Frage nicht. – juanchopanza

+0

@juanchopanza wahr, aktualisiert. – Naszta

+0

Ihre Änderung ändert nichts an der Tatsache, dass dies die gestellte Frage nicht beantwortet. Und Sie können für ein Set andere Vergleichskriterien verwenden. – juanchopanza