2016-06-26 12 views
0

Inconsistance passiert!C++ unordered_map Initialisierung was passiert mit dem zugrunde liegenden

Dieses Stück Code geht gut

class Solution { 
public: 
    vector<int> topKFrequent(vector<int>& nums, int k) { 
     unordered_map<int, int> num_freq_map; 
     for(const auto &ele : nums) { 
      ++num_freq_map[ele]; 
     } 
    } 
}; 

aber wenn ich geändert unordered_map<int, int> num_freq_map;-unordered_map<int, int> num_freq_map();, ein Paar Klammern angehängt wird.

class Solution { 
public: 
    vector<int> topKFrequent(vector<int>& nums, int k) { 
     unordered_map<int, int> num_freq_map(); 
     for(const auto &ele : nums) { 
      ++num_freq_map[ele]; 
     } 
    } 
}; 

Ich habe einen Fehler: Line 6: lvalue required as increment operand

Warum? Was ist mit meiner Variablen num_freq_map beim Initialisieren passiert?

Wie sollte ich diese Art von Dingen lernen. Lesen Sie den Quelltext der Standard Template Library, richtig?

+0

Grundsätzlich denkt es, dass Sie eine Funktion deklarieren. Verwenden Sie nicht '()', wenn keine Argumente vorhanden sind. –

Antwort

1

Die

unordered_map<int, int> num_freq_map();

num_freq_map definiert als Zeiger auf eine Funktion, die keine Parameter nehmen und gibt unordered_map<int, int>. Aber keine Sorge, wie

unordered_map<int, int> num_freq_map;

schon ruft die richtige Standardkonstruktors für Sie. Wenn Sie den Anruf explizit an den Leser, in C++ 11 machen möchten, können Sie Klammer-Initialisierung verwenden:

unordered_map<int, int> num_freq_map{};

+1

Nein, kein Zeiger auf eine Funktion. Eine Funktion. –

1
unordered_map<int, int> num_freq_map(); 

interpretiert wird, wie folgend:

num_freq_map ist eine Funktion ohne Parameter, die unordered_map<int, int> zurückgibt.

Um diese Art von Dingen zu lernen, lesen Sie die C++ FAQ von Marshall Cline.

Es gibt keinen "STL-Quellcode". STL hat viele verschiedene Implementierungen. Ich bezweifle auch, dass das Lesen eines STL-Quellcodes nützlich ist, es sei denn, Sie haben ein sehr spezifisches Problem.

Verwandte Themen