【问题标题】:Search a vector of boost::tuple搜索 boost::tuple 的向量
【发布时间】:2012-04-11 22:36:41
【问题描述】:

boost 库中是否有算法或辅助方法来搜索boost::tuple 对象的向量?这是我的代码:

typedef boost::tuple<int, char const*, char const*> Tuple;
typedef std::vector<Tuple> ErrorStringMap;

ErrorStringMap mystrings = tuple_list_of
    (10, "10", "ten") 
    (20, "20", "twenty") 
    (30, "30", "thirty") 
    (40, "40", "fourty");

我想搜索元组的向量并找到第一个值为 20 的元组作为元组中的第一个元素。我想访问该元组的第二个和第三个元素。

【问题讨论】:

  • 如果您总是按第一个元素查找元素,请考虑改用(unordered_)map
  • std::find_if 有什么问题?
  • @ildjarn 我相信我必须为此编写自己的函子。我希望 boost 已经有一个辅助方法,它可以返回对元组的引用而不是迭代器(更容易使用)。我可以很容易地编写自己的解决方案,我只是想首先确保 boost 没有任何东西。
  • 我想你可以做 std::find_if(mystrings.begin(), mystrings.end(), boost::bind(&amp;Tuple::get&lt;0&gt;, _1) == 20) 而不是写一个完整的仿函数... Boost.Range 可能允许一些更清洁的东西,但我不知道任何具体的副手。
  • Phoenix's placeholders are in boost::phoenix::placeholders。此外,如果您使用的是 Phoenix,则不需要 bind —— 使用适当的包含,at_c&lt;0&gt;(_1) == 20 可以工作。

标签: c++ boost boost-tuples


【解决方案1】:

ildjarn 在我的问题下方的 cmets 列表中回答了这个问题,但他没有作为答案发布,所以我会为他做:

Phoenix 的占位符在 boost::phoenix::placeholders 中。另外,如果 您正在使用 Phoenix,您不需要为此绑定 - 使用正确的 包括,at_c(_1) == 20 个作品。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多