2011-11-11 2 views
-3

アプリケーションのプロパティを格納および取得するのに役立つハッシュテーブルを実装しています。現時点では、存在しない値を取得しようとする場合を除いて、ほとんどの場合動作します。私のコードは、空の文字列を返す必要がありますが、代わりにクラッシュします。ここに関連コードがあります。配列は動的に割り当てられます。C++は、チェーンを使用してハッシュテーブルからプロパティを取得します。

struct Property { 
    Property* next; 
    std::string key; 
    std::string value; 

    Property() { 
     key = ""; 
     value = ""; 
     next=NULL; 
    } 
}; 

Property* properties; 
int propSize; 

std::string Properties::getProperty(std::string key) { 

    Property *ptr = &properties[hashcode(key)%propSize]; 
    if (properties[hashcode(key)%propSize].key == "") { 
     return ""; 
    } 
    else { 
     while((ptr->key != key) && (ptr->next != NULL)) 
      ptr = ptr->next; 

     if (ptr->key != key) 
      return ""; 
     else 
      return ptr->value; 
    } 

} 
+4

-1:これをデバッグしようとしましたか?あなたは何を発見しましたか? –

+3

C++は ''(または ''、 ''、または '')に専門的に設計されたハッシュテーブルを既に持っています。目的がハッシュテーブルを書く方法を学ぶことではない場合は、なぜあなた自身のロール、ひどく、? –

+0

私はそれをデバッグしようとし、何も得られませんでした。全体がちょうどwhileループで停止しました。 1.私はunordered_mapについて知りませんでした 2.私はマップを通過してすべてのエントリをマップに保存する必要があります。 – Katherine1

答えて

0

unordered_mapのようないくつかの標準的なハッシュテーブルの実装の1つを使用します。あなたは、「地図を通ってすべての項目を保存する必要がある」と述べました。マップを繰り返し処理して、要素を使用して、たとえばstd::copy()を使用して、必要な処理を行うことは自明です。

+0

現時点では、unordered_mapの実装は動作していません。 [link](http://cpptutorials.freeforums.org/tr1-unordered-map-t621.html)に続いて、 '' trd 'という名前空間でエラーが発生しました。' std 'はタイプを指定しません。 boostのバージョンでは、ヘッダのコードでエラーが発生しました。 – Katherine1

関連する問題