我有一个container<std::deque<T>>
和一个const T*ptr
我知道它指向一个包含deque
的对象。现在,我想知道(1)它来自哪个deque
和(2)它的索引。如何获得该信息?
我知道我可以遍历所有对象,但应该有更快的解决方案,不应该吗?
答案 0 :(得分:1)
这是双重迭代的任务:
#
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;
}
}