当前位置: 首页 > 知识库问答 >
问题:

如何在具有唯一指针值的地图上使用std::min_element?(C++)

苏华荣
2023-03-14

我有一个具有唯一指针值的映射,并希望获得对具有最小值的对的引用。我使用下面的代码来实现这一点,但是在调用std::min_element的行中出现了一个错误。错误消息为:调用对象时没有匹配函数...。我该怎么做才能解决这个问题?

  using pair_type = std::pair<std::string, std::unique_ptr<int>>;

  std::map<std::string, std::unique_ptr<int>> map;

  map.insert(std::make_pair("a", std::make_unique<int>(1)));
  map.insert(std::make_pair("b", std::make_unique<int>(2)));
  map.insert(std::make_pair("c", std::make_unique<int>(3)));

  pair_type& min_pair = std::min_element(std::begin(map), std::end(map),
                                         [](pair_type &p1, pair_type &p2) {
                                           return *p1.second < *p2.second;
                                         });

共有1个答案

黄淇
2023-03-14

std::map的值类型为std::pair ,当键在映射中时,您不能编辑它。

using map_type = std::map<std::string, std::unique_ptr<int>>;

map_type map;

map.insert(std::make_pair("a", std::make_unique<int>(1)));
map.insert(std::make_pair("b", std::make_unique<int>(2)));
map.insert(std::make_pair("c", std::make_unique<int>(3)));

map_type::iterator it = std::min_element(std::begin(map), std::end(map),
                                         [](map_type::const_reference p1, map_type::const_reference p2) {
                                           return *p1.second < *p2.second;
                                         });
 类似资料:
  • 问题内容: 将一些地图定义为: 我想要一个指向地图地址的变量(不要复制所有变量)。我尝试使用: 但在使用时,它显示 内部编译器错误:无类型的var,初始化:new 如何获得? 编辑 该错误由另一个问题显示。 问题答案: 映射是引用类型,因此它们总是通过引用传递。您不需要指针。转到文档

  • 问题内容: 当值之一为nil时,我尝试对指向指针的映射进行编码时,Gob的Encode返回错误。这似乎与文档相矛盾(但是我可能会误解其含义): 在切片,数组和映射中,即使所有元素均为零,也会传输所有元素,即使是零值元素。 码: 输出: 在这种情况下,料滴是否有充分的理由失败?似乎两个明显的选择之一都比失败更可取:1)不对任何键值为零的键进行编码,或者2)即使值为零也对所有键进行编码。在当前状态下,

  • 我使用这个代码: 定义: 我用命令构建它:,结果是: 警告:在“void*memcpy(void*,const void*,size_t)”调用中“大小”的参数与目标的指针类型“双*”相同;预期的“双倍”或显式长度 [-Wsizeof-指针-内存] 我不明白它是什么。你能告诉我如何使它正确工作吗?

  • 问题内容: 我们如何用番石榴来做到这一点?注意返回类型的存在,因为许多键可以在任何法线映射中映射到相同的值。 似乎坚持价值观的统一性,但我没有这种奢侈。 问题答案: 你可以这样做: 请注意,几乎在您每次编写或类似内容时,a 或a 都是您真正想要的。

  • 我试图理解地址计算指令是如何工作的,尤其是使用< code>leaq命令。然后,当我看到使用< code>leaq进行算术计算的例子时,我会感到困惑。例如,下面的C代码, 在组装中, 如果我的理解是对的,leaq应该移动任何地址,应该是,评估为。我感到困惑的是,既然值x存储在中,这只是内存地址,为什么乘以%rdi 3然后左移这个内存地址2等于x乘以12?当我们乘以3时,我们不是跳转到另一个不保存值

  • 问题内容: 会根据其位置而不是其值来生成其元素被视为唯一的元素。所以基本上我想避免重复这样的事情: 之后的过滤是不可能的,因为在我的情况下,排列的数量太大。 有人知道合适的算法吗? 非常感谢你! 编辑: 我基本上想要的是以下内容: 这是不可能的,因为sorted创建列表并且itertools.product的输出太大。 抱歉,我应该已经描述了实际问题。 问题答案: 结果: 编辑(这是如何工作的):