2017-02-26 264 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>>的东西。