地图中向量的最后一个元素的访问器(C ++)

时间:2020-03-05 15:04:22

标签: c++ dictionary stdvector

我正在尝试将访问器分配给映射内向量的最后一个元素。我正在做的事情如下;

std::map<std::string, std::vector<double> > test;
test.insert(std::make_pair("smth",std::vector<double>() ));
double* bla = &(test["smth"].back());
(*bla) += 5.

基本上,我想做的是访问映射内向量的最后一个元素,并通过访问器bla对其进行修改。但是,我不断遇到细分冲突。所以我想也许我需要初始化向量中的double,因此将其设置为零,但仍然是同样的问题。我怎样才能解决这个问题?谢谢!

2 个答案:

答案 0 :(得分:4)

在您的示例中,没有back您可以访问。向量为空:std::vector<double>()。来自cppreference

在空容器上进行回调会导致未定义的行为。

还要注意,没有指向指向back的指针的意义。该方法已返回引用(如果存在该元素)。您应在矢量上添加一些内容,然后才能对其进行修改,例如:

std::map<std::string, std::vector<double> > test;
auto x = test.insert(std::make_pair("smth",std::vector<double>() ));
x.first->push_back(0);
x.first->back() += 5;

答案 1 :(得分:0)

std::vector::back()函数不能在空容器中使用,这意味着std::vector<double>不应为空,并且必须填充至少一个值。
另一点是,在这种情况下,您可以使用更有效的功能std::map::emplace_hint来完成以下相同的操作,

 std::map<std::string, std::vector<double> > test;
 test.emplace_hint(test.end(), "smth", 1);
 double* bla = &(test["smth"].back());
 (*bla) += 5.;
相关问题