【问题标题】:How to set value in c++ unordered_map and return reference?如何在 c++ unordered_map 中设置值并返回参考?
【发布时间】:2021-09-28 16:19:52
【问题描述】:

所以这很愚蠢:

Nodes[pos] = node;
return &Nodes[pos];

因为我插入然后进行查找。我试过这样:

return &Nodes.emplace(pos, node).first->second;

但它不返回引用。

【问题讨论】:

  • 此上下文中的& 符号是地址运算符。如果您想返回指针而不是引用,这将很有用。假设你的函数的返回类型是一个引用,你可以做return Nodes.emplace(pos, node).first->second;
  • @NathanPierson 很抱歉没有澄清它。我想要一个参考。指针。但这似乎不起作用。
  • 什么是“参考指针”?
  • 只要值类型的赋值运算符是常规的,return Nodes[pos] = node; 就可以正常工作。

标签: c++ hashmap


【解决方案1】:

你可以像这样使用insert/emplace


int& f1(std::unordered_map<int, int>& m) {
  auto [iterator, was_inserted] = m.insert({10, 100});
  return iterator->second;
}

operator[]如果key不存在也可以创建,所以你也可以这样做:

int& f2(std::unordered_map<int, int>& m) {
  auto& node = m[10];
  node = 100;
  return node;
}

【讨论】:

  • 是的,我应该。谢谢:)
猜你喜欢
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
  • 2011-02-18
  • 2021-04-27
  • 1970-01-01
  • 2021-11-14
相关资源
最近更新 更多