【问题标题】:Mapping a long long integer to vector of pairs将 long long 整数映射到对向量
【发布时间】:2023-03-03 11:51:01
【问题描述】:

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

其实问题是

  • 我需要将 long long int 映射到向量,但它应该包含 2 个值。

  • 我认为向量对适合这个。

示例: 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.如何将这些值添加到地图

2.如何访问它。可能的例子*

【问题讨论】:

  • 一般来说,像“有没有可能做……”这样的问题总是可以回答为“是”。这里也是一样,是很有可能做到的。
  • 请回答第二个老兄
  • 至于语法,请记住映射mp 有一个重载的“索引”运算符,它返回对特定键值的引用。所以例如mp[5] 可以用作向量,您可以对其进行迭代/遍历 (for (auto const& pair : mp[5]) { std::cout << pair.first << " - " << pair.second << '\n'; }),或将元素添加到 (mp[5].emplace_back(1, 3);)
  • 你的问题是什么?对于访问,使用,例如,索引operator[]。对于遍历,使用例如迭代器或基于范围的 for 循环。这些是每本初学者 C++ 书籍中都提到的非常标准的方法。
  • "please help" is not an actual question。如果你展示你的代码试图访问和遍历它,解释它应该做什么以及它没有做什么,包括可能的错误、输入和输出,你可以把它变成一个很好的回答问题

标签: c++ c++14 unordered-map


【解决方案1】:

您的实际问题是,无论您的用例如何,您都不知道如何使用 std::unordered_map

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


如何将这些值添加到地图?

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

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

注意:这些功能不一样。您可以阅读有关每个函数的详细信息(它的作用以及如何使用它)的文档。

如何访问它?

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

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

但我不知道如何访问和遍历它。

如果你想遍历它,最简单的方法是使用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)

【讨论】:

  • 非常感谢。这就是我一直在寻找的答案。
猜你喜欢
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
相关资源
最近更新 更多