【问题标题】:Get enum key from unordered map by string value通过字符串值从无序映射中获取枚举键
【发布时间】:2022-01-20 17:57:30
【问题描述】:

我需要一个函数来检查输入 (std::string) 是否唯一并返回其对应的枚举值。

我已经能够只用一个简单的向量来实现这个函数,它会检查输入是否唯一。

它应该返回enumE::HELLO

我尝试将上面的代码调整为矢量以适应此功能,但我并没有真正做到。

【问题讨论】:

  • 在 not found / not unique 情况下应该返回什么?到目前为止,您到底尝试了什么?您在哪里卡住了?
  • 听起来您正在尝试向后使用地图。如果您想使用地图查找某些内容,那应该是地图的键,而不是值。
  • @Artyer 在枚举类中,有值 NOTFOUND AND NOTUNIQUE。我尝试使用 for 循环,但随后收到错误消息“没有可行的转换”
  • @SamVarshavchik 我这样做的原因是因为我想将键用作 switch case 值,而这对于字符串是不可能的。
  • 嗯,您可以像在矢量上一样在地图上运行循环。像for (auto& [enumValue, command] : commands) { ... } 这样的东西。或者,如果您的编译器不够新,无法支持结构化绑定,那么 for (auto& elem : commands) { auto enumValue = elem.first; auto command = elem.second; ...}

标签: c++ algorithm enums key unordered-map


【解决方案1】:

根据您对示例的描述,here is a quick implementation。当然,逻辑可能不完全是你写的,但我相信你可以调整它。

  • 如果std::string 有一个可以为您找到子字符串的std::string::find 函数,您为什么要遍历整个字符串?
  • 有必要经历你上面写的所有麻烦吗?代码是否需要如此密集且难以阅读?

随意使用该功能并实现您的逻辑。

【讨论】:

  • 谢谢。我担心代码需要如此密集才能使其返回唯一值,但我会自己解决这个问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多