2011-09-21 6 views
0

bool値を返すために関数unordered map findを使用したい場合は、どうすればよいでしょうか?unordered map find関数を使用する

ここに私のコードがあります。

ほかに何をする必要がありますか?ブールを返すことは可能ですか?私が見つけたこれに関する文書はほとんどない。

return tempSymbolTable->hashtable.find(lexeme) != tempSymbolTable->hashtable.end(); 

また、これを割り当てる:

これは私がhttp://msdn.microsoft.com/en-us/library/bb982431.aspx

+2

正確には、 'std :: boolalpha'はどういう意味ですか?ブール値ではありません... –

答えて

1

文書については、std::unordered_map::findをご覧ください。そこにそれは言う:

戻り値 キーのある要素にイテレータ。そのような要素が見つからなければ、past-the-end(end()参照)イテレータが返されます。

標準コンテナ機能を見つけるの残りの部分と同様に、

bool contained = it != tempSymbolTable->hashtable.end(); 
2

tempSymbolTable->hashtable.find(lexeme)から例を得たところ、それが失敗した場合、あなたは非常に単純にブール値にこの結果を変換することができますので、tempSymbolTable->hashtable.end()を返しますです一時変数とその作業は不要です。あなたの関数はに減らすことができます。

bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme) 
{ 
    return hashtable.find(lexeme) != hashtable.end(); 
} 
1
bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme) 
{ 
    SymbolTable *tempSymbolTable = this; 
    return tempSymbolTable->hashtable.end() != tempSymbolTable->hashtable.find(lexeme); 

} 
1

あなたはtempSymbolTable-に対する検索の戻り値をテストする必要がある> hastable.end()は、それらが等しい場合、それはあなたの要素を見つけることができませんでした。なぜなら、現在の形では、ブールだけを返すものよりも一般的であるからです。

0

std::unordered_map::find()を使用し、要素が存在するかどうかを示すブール値を取得するために、故障にend()を返します。

bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme) 
{ 
    SymbolTable *tempSymbolTable = this; 
    std::unordered_map<std::string, Identifier*>::iterator it = 
    tempSymbolTable->hashtable.find(lexeme); 

    return it != tempSymbolTable->hashtable.end(); 
} 

参考:

EDIT:戻り値の変化感

はこれを試してみてください。

+0

ロジックが逆転しています。マップに文字列が含まれていない場合はtrueを返します。 – Ferruccio

+0

あなたは 'it!= tempSymbolTable-> hashtable.end()'を意味しましたか?関数の名前は 'Contains()'であり、 'false'を返すことは直感的ではないでしょう。 – Chad

+1

固定、ありがとうございます。彼はそれがboolを返すことを望んだ、彼はそれが持っている必要があるどのような価値を言っていない:) –