2017-02-26 4 views
0

ハッシュ技術を使用してC++で電話帳プロジェクトを作成したいのですが、私がする必要があるのはlocation.soに基づいて連絡先を検索する必要がありますキー値としての場所が同じ場所に複数の連絡先があります。同じキー(場所)の下に複数の値(名前、電話番号)を格納する方法。複数の値を同じキーの下でC++でハッシングを使って保存する方法

+3

'std :: unordered_multimap'を使用してください。 –

+0

@DannyuNDosはハッシュ技術の一部ですか? –

+0

これは、同じキーを持つ複数の要素を格納できるハッシュテーブルです。 –

答えて

2

C++ 11以上を使用している場合は、std::unordered_multimapを使用して、キーごとに複数のエントリ(場所ごとに複数のエントリなど)を保存できます。これは、同じキーを持つ複数のエントリを許可するハッシュマップです。エントリごとに複数のプロパティを格納するには、構造体またはクラスを使用できます。最後に、次のようになります。

struct contact_t { 
    std::string name; 
    std::string phone_number; 
} 

std::unordered_multimap<std::string, contact_t> directory; 

int main(int argc, char *argv[]) 
{ 
    // Add entry 
    contact_t contact; 
    contact.name = "Fooman"; 
    contact.phone_number = "00 000 00000000"; 
    directory.emplace("Barcity", contact); 

    // List all entries of one city 
    auto range = directory.equal_range("Barcity"); 
    for (auto it = range.first; it != range.second; ++it) { 
     auto &entry = it->second; // it->first would be the key/location 
     std::cout << "Name: " << entry.name 
        << "Phone: " << entry.phone_number << std::endl; 
    } 
} 

ただし、同じキーの値はソートされていないとみなします。代わりにstd::unordered_map<std::string, std::multiset<contact_t>>のようなものを使用することができます。