如何找到std :: deque是否包含给定对象?

时间:2014-04-16 17:37:09

标签: c++ deque

我有一个container<std::deque<T>>和一个const T*ptr我知道它指向一个包含deque的对象。现在,我想知道(1)它来自哪个deque和(2)它的索引。如何获得该信息?

我知道我可以遍历所有对象,但应该有更快的解决方案,不应该吗?

2 个答案:

答案 0 :(得分:1)

这是双重迭代的任务:

  1. 遍历容器
  2. 迭代当前元素(双端队列)并比较
  3. template<typename container> std::pair<container::iterator_t, size_t> FindIndices(const container& c, const container::value_type* x) {
        for(auto a = c.begin(); a != c.end(); a++)
            for(auto b = a->begin(); b != a->end(); b++)
                if(&*b == x)
                    return std::pair<container::iterator_t, size_t>(a, b-a->begin());
        return std::pair<container::iterator_t, size_t>(c.end(), -1);
    }
    

    如果您可以在容器中存储shared_pointers或unique_pointers,则可以使用std :: map有效地检索索引,只要这些索引不会发生变化。
    如果只有队列没有改变,那么仍有一些潜在的节省。

答案 1 :(得分:0)

类似的东西(我没有编译过这个但你明白了):

container<deque<T>> MyCont;
for( auto iter = MyCont.begin(); iter != MyCont.end(); ++iter )
{
  auto foundIter = find( *iter.begin(), *iter.end(), MyObject );
  if ( foundIter != *iter.end() )
  {
    dequeIndex = distance( *iter.begin(), foundIter );
    containerIndex = distance( MyCont.begin(), iter );
    break;
  }
}