【发布时间】: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(&Tuple::get<0>, _1) == 20)而不是写一个完整的仿函数... Boost.Range 可能允许一些更清洁的东西,但我不知道任何具体的副手。 -
Phoenix's placeholders are in
boost::phoenix::placeholders。此外,如果您使用的是 Phoenix,则不需要bind—— 使用适当的包含,at_c<0>(_1) == 20可以工作。
标签: c++ boost boost-tuples