2017-02-26 258 views
0

我想在C++中使用哈希技術製作電話目錄項目。我需要做的一件事是它必須根據位置搜索聯繫人,該位置作爲關鍵值,但同一位置會有多個聯繫人。因此,如何在同一個關鍵字(位置)下存儲多個值(姓名,電話號碼)。如何在同一個鍵下使用哈希在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>>的東西。