我有这个元组的神韵:
deque<boost::tuple<ppa::Node*, ppa::Node*, ppa::Node*, bool> > deque_wait;
我希望能够逐个比较这些元素:
deque<boost::tuple<ppa::Node*, ppa::Node*, ppa::Node*, bool> > deque_done;
这是因为我想查看哪些节点已完成,然后让一个线程选择列表中的下一个并执行某些操作,我的代码是:
尝试做这样的事情:
bool tuple_compare(boost::tuple<ppa::Node*, ppa::Node*,
ppa::Node*, bool> &tuple_to_check)
{
for(int i = 0; i < deque_wait.size(); i++) {
boost::tuple<ppa::Node*, ppa::Node*, ppa::Node*, bool> tuple_compare = deque_wait.at(i);
ppa::Node *father = boost::get<0>(tuple_compare);
ppa::Node *son = boost::get<0>(tuple_compare);
ppa::Node *second_son = boost::get<2>(tuple_compare);
bool has_seq = boost::get<3>(tuple_compare);
cout << "checking " << boost::get<1>(tuple_to_check)->get_name() << " "
<< boost::get<2>(tuple_to_check)->get_name() << " "
<< boost::get<0>(tuple_compare)->get_name() << endl;
}
return true;
}
线程功能:
void wait_function(void)
{
try {
} catch (boost::lock_error &le)
{
cout << le.what() << " from " << boost::this_thread::get_id() << endl;
}
}
我知道需要互斥锁,我已经计划好了,现在我只需要知道如何将双端队列的元素与另一个进行比较,看看它们是否满足某些条件并运行它们,现在的比较是与sort函数一起使用,如:
sort(deque_wait.begin(), deque_wait.end(), tuple_compare);
因为我虽然可以使用这个函数来比较2个deques,但总的来说我想要做的是将deque_done的第一个元素与所有等待进行比较,如果满足条件,则将bool更改为true,他们是完成和等待的不同,我想检查它们的原因是因为这个树状的结构有一个父母和两个儿子,所以每个元组是一个父母和两个儿子,我需要看看哪些儿子有一个序列放它已经准备好了,哪些不是这样,有一个线程来接它,如果需要另外一个像矢量或另一个deque的东西并不重要,所以在这种情况下价格并不重要,谢谢。 (:
答案 0 :(得分:0)
好的,我们试一试:
我想要做的是将deque_done的第一个元素与所有等待进行比较,如果满足条件,则将bool更改为true,
调用sort()
不是你需要的 - 它在技术上将deque_wait的每个元素相互比较,并根据结果对它们进行排序。要将一个给定值与每个deque-element进行比较,您应该尝试std::find()
或std::find_if()
。
//Helper functor to compare:
struct tuple_compare
{
//note: maybe it could use some const's
tuple<...>& value;
tuple_compare(tuple<...>& to_compare) : value(to_compare) {}
bool operator()(tuple<...>& second) const
{
//do anything to compare the original value with the given parameter
}
};
deque<...>::iterator pos = find_if(deque_wait.begin(),deque_wait.end(),tuple_compare(deque_done.front()));
if(pos!=deque_wait.end())
//...