2016-06-26 22 views
0

不整合が発生します! Iは、一対のブラケットを追加、unordered_map<int, int> num_freq_map();unordered_map<int, int> num_freq_map;から変化したときC++のunordered_mapの初期化基底に何が起こるか

コードのこの部分は

ウェル
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]; 
     } 
    } 
}; 

行くが。 Line 6: lvalue required as increment operand

理由:

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]; 
     } 
    } 
}; 

私はエラーを得ましたか?私の変数 num_freq_mapに何が起こったのですか?

このようなことをどのように学習すればよいですか。標準テンプレートライブラリのソースコードをお読みください。

+0

基本的には、あなたが関数を宣言していると思います。引数がない場合は '()'を使わないでください。 –

答えて

1

unordered_map<int, int> num_freq_map();

は、任意のパラメータと戻りunordered_map<int, int>をとらない関数へのポインタとしてnum_freq_mapを定義します。しかし

unordered_map<int, int> num_freq_map;

すでにあなたのための正しいデフォルトコンストラクタを呼び出して、心配しないでください。あなたがC++ 11には、読者への呼び出しを明示的にしたい場合は、ブレース初期化を使用することができます。

unordered_map<int, int> num_freq_map{};

+1

いいえ、関数へのポインタではありません。機能。 –

1
unordered_map<int, int> num_freq_map(); 

は、以下のように解釈されます。

num_freq_mapはない関数でありますunordered_map<int, int>を返すパラメータ。

この種のことを学ぶには、Marshall ClineのC++ FAQを読んでください。

"STLソースコード"のようなものはありません。 STLにはさまざまな実装があります。また、非常に具体的な問題がなければ、STLソースコードを読むことは有用であると私は疑う。

関連する問題