2017-10-15 13 views
0

ここにコードとエラーメッセージがあります。このコード行を削除してみたところBuilding t = beginEndMap[b.id];、コンパイルはOKです。しかし、エラーにこの行のカジュアルを把握することはできません。この行はペアに関連していませんが、コンパイルエラーはペアに関連しています。C++ std :: pairに関する奇妙なコンパイルエラー

エラーメッセージ

Error: 
    required from 'std::pair<_T1, _T2>::pair(std::piecewise_construct_t, std::tuple<_Args1 ...>, std::tuple<_Args2 ...>) [with _Args1 = {const int&}; _Args2 = {}; _T1 = const int; _T2 = Building]' 

ソースコード

struct Building { 
    int id; 
    int pos; 
    int height; 
    bool isStart; 
    Building(int i, int p, int h, int s) { 
     id = i; 
     pos = p; 
     height = h; 
     isStart = s; 
    } 
}; 

class Solution { 
public: 
    vector<pair<int, int>> getSkyline(vector<vector<int>>& buildings) { 
     vector<Building> sortedBuilding; 
     unordered_map<int, Building> beginEndMap; 
     vector<pair<int, int>> result; 
     for (Building b : sortedBuilding) { 
      Building t = beginEndMap[b.id]; 
     } 
     return result; 
    } 
}; 

int main() { 

} 

答えて

2

原因

かいつまんで、あなたはそれがにISN DefaultConstructibleであることを、その後Buildingニーズをunordered_map::operator[]を使用する場合't。したがって、(クリプテック)エラー。

これは、キーが見つからない場合にoperator[]が挿入を行うために発生します。

要件は次のように行く:デフォルトのアロケータを使用する場合

value_typeは(別名std::pair<const int, Building>(私のノート))EmplaceConstructible

std::piecewise_construct, std::forward_as_tuple(key), std::tuple<>() 

から、これはその key_typeint を意味する必要がありますあなたの場合)は CopyConstructiblemapped_type である必要があります(Buildingケース)はDefaultConstructibleである必要があります。

ソリューション

Buildingのデフォルトコンストラクタを持っている、またはキーが見つからない場合スローされますので、それは、この要件はありませんunordered_map::atを使用することです。


なぜunsorted_mapする を関連する何か以外のペアに関連するコンパイルエラー? valueペア -

std::pairkeyを格納するために内部的に使用されるため。

順序なしマップはキーと値のペア ユニークキーを持つ

が含まれており、テンプレートを持っているときcripticエラーのこれらの種類は、あなたが得るための連想コンテナです。 C++のコンセプトが進行中で、この種のエラーを大幅に改善してくれるはずです。


std::unordered_map::operator[]

+0

しかし、私の 'key_type'が他のint' Building'' 'よりもある、定義' unordered_map beginEndMap'を見て、あなたが '' key_type以外value_type'意味ですか'? –

+1

@LinMa私の悪い。 'value_type'です。私はそれを訂正した。 – bolov

+0

ありがとう、あなたの返事は私には合っていますが、なぜコンパイルエラーは何かの他の組み合わせに関連してunsorted_mapに関連していますか? –