我在工作中遇到了一个问题
我的c ++课程中unordered_map
上有一个vector<int>
像这样unordered_map < int, vector<int> >
那么我怎样才能初始化嵌套容器,这样当我将一个键插入哈希表时 并且值(向量)将为十零?
答案 0 :(得分:3)
您可以使用列表初始化:
std::unordered_map<int, std::vector<int>> m
{ { 2, std::vector<int>(10, 0) }
, { 5, std::vector<int>(10, 0) }
, { 6, std::vector<int>(10, 0) }
, { 9, std::vector<int>(10, 0) }
};
答案 1 :(得分:2)
这很简单:
std::unordered_map<int, std::vector<int>> my_map;
my_map[123] = std::vector<int>{1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
现在my_map
将包含一个条目,其中键为123
,数据为包含十个条目的向量。
答案 2 :(得分:2)
不允许用户直接访问地图,让他们通过访问者,这样你就可以确保向量的填充方式如下:
class FooBar
{
public:
// access the map
std::vector<int>& operator[](int n);
private:
std::unordered_map<int, std::vector<int>> map;
};
std::vector<int>& FooBar::operator[](int n)
{
auto iter = map.find(n);
if (iter == map.end()) // index not found, so insert it
iter = map.emplace(n, std::vector<int>(10, 0)).first;
return *iter;
}
答案 3 :(得分:1)
根据你在评论中所说的,你需要一个固定大小的数组。 这是一个小例子:
#include <array>
#include <unordered_map>
#include <iostream>
int main(int, char const *[])
{
std::unordered_map<int, std::array<int, 10>> the_map;
std::cout << the_map[0][1] << std::endl;
the_map[0][2]++;
std::cout << the_map[0][2] << std::endl;
return 0;
}
输出将是:
0
1
如果您想更改默认值,可以执行以下操作:
struct my_array : public std::array<int, 10> { my_array() { fill(2); } };
int main(int , char const *[])
{
std::unordered_map<int, my_array> the_map;
std::cout << the_map[0][1] << std::endl;
the_map[0][2]++;
std::cout << the_map[0][2] << std::endl;
return 0;
}
输出:
2
3
不是我最喜欢的选择,但你可以这样做。