将一个长整型映射到成对的向量



在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

etc

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

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

问题

1.如何将这些值添加到映射

2.我如何访问它。例如,如果可能*

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

您应该做的第一件事是阅读有关std::unordered_map的相关文档。它会给你所有问题的答案。


如何将这些值添加到映射?

有几种(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不存在,将抛出异常(

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

如果要遍历它,最简单的方法是使用基于范围的for循环。


示例:

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)]

实例(C++14(

最新更新