如何在c ++中使用散列在同一个键下存储多个值

时间:2017-02-26 10:37:41

标签: c++ hash

我想使用散列技术在c ++中创建一个电话目录项目。我需要做的一件事是它必须根据location来搜索联系人。所以我会将该位置作为键值但是会有多个联系人相同的location.so如何在同一个键(位置)下存储多个值(名称,电话号码)。

1 个答案:

答案 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>>的内容。