【问题标题】:C++ Find struct in list using a string item?C ++使用字符串项在列表中查找结构?
【发布时间】:2017-09-17 20:33:34
【问题描述】:

我对 c++ 很陌生,我正在尝试弄清楚如何使用字符串在列表中查找结构。

我有一个这样的结构:

struct entrada {
  string token;
  string lexema;
  string tipo;
};

还有一个清单:

list<entrada> simbolos;

在“simbolos”中插入一些“entrada”

假设我想搜索带有某个“lexema”的“entrada”,并找出其他字符串。有没有一种简单的方法可以做到这一点?比如函数什么的。我使用 while/for 完成了它,但这不是我想要的。

【问题讨论】:

  • 您希望搜索对大型列表高效吗?如果是这样,您需要不同的数据结构。如果没有,标准库将不会有太大帮助(因为它试图提供有效的算法)。
  • @DavisHerring 它将用于一些元素。我怎么能那样做?我也可以使用地图,它不需要是列表。
  • 澄清一下“简单”是什么意思。就代码行数或代码易读性而言是否简单?
  • 如果你不知道自己想要什么,没有人可以帮助你。
  • std::find_if。谷歌一下。

标签: c++ list struct


【解决方案1】:

根据你的 cmets,下面的 sn-p 向你展示了一种使用 STL std::find_if 中的算法将元素搜索到容器中的简单方法。

auto match = std::find_if(simbols.cbegin(), simbols.cend(), [] (const entrada& s) {
  return s.lexema == "2";
});

if (match != simbols.cend()) {
  std::cout << match->token << '\n'
            << match->lexema << '\n'
            << match->tipo << '\n';
}

Live Demo

至少需要C++11

【讨论】:

  • 我完全赞成有意义的名字,没有魔法常数。但是str_to_find,认真的吗?
  • @StoryTeller 我怎么能假设问题的上下文并给出一个有意义的名称?如果你能建议我,我可以改变答案:P
  • return s.lexema == "2";。这是额外名称什么都不做的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多