将长整型映射到成对向量

Mapping a long long integer to vector of pairs

在 C++14 中,我尝试使用 map 来存储我需要快速访问的值。

其实问题是

示例: 5 是我的 long long int

5 -> 我有

         1,3

         2,5

         5,4

89998 我有

        6,899

        8,8887

        9999,566

等等

unordered_map<long long,vector<pair<int,int>>>mp

但是不知道怎么访问和遍历

问题

1.How 我是否将这些值添加到地图

2.How 我可以访问它吗?可能的话举例*

你的实际问题是你不知道如何使用 std::unordered_map 无论你的用例如何。

您应该做的第一件事是阅读关于 std::unordered_maprelated documentation。它会为您带来所有问题的答案。


How do I add those values to map ?

您有几种 (C++14) 方法:

  • std::unordered_map::insert()
  • std::unordered_map::emplace()
  • std::unordered_map::operator[]()

注:这些函数不一样。关于每个函数的详细信息(它的作用和使用方法)由您阅读文档。

How do I access it ?

您可以使用以下方式访问元素:

  • std::unordered_map::operator[]()注:元素不存在会插入)
  • std::unordered_map::at()注意:不存在会抛出std::out_of_range异常)

But I don't know how to access it and traverse it.

如果要遍历的话,最简单的方法就是用一个range-based for loop.


示例:

int main()
{
    using ValueType = std::vector<std::pair<int, int>>;

    // Create the map
    std::unordered_map<long long, ValueType> umap;

    // Fill the map
    umap.emplace(std::make_pair<long long, ValueType>(5,     {{1,   3}, {2,    5}, {5,      4}}));
    umap.emplace(std::make_pair<long long, ValueType>(89998, {{6, 899}, {8, 8887}, {9999, 556}}));

    // Iterate over the map
    for(const std::pair<long long, ValueType> & element : umap)
    {
        std::cout << element.first << " -> " << '[';
        for(const std::pair<int, int> & couple : element.second)
            std::cout << '(' << couple.first << ", " << couple.second << ')';
        std::cout << "]\n";
    }

    return 0;
}

输出:

89998 -> [(6, 899)(8, 8887)(9999, 556)]
5 -> [(1, 3)(2, 5)(5, 4)]

Live example (C++14)