gpt4 book ai didi

c++ - 如何从 multi_index_container 中获取倒数第二个元素

转载 作者:行者123 更新时间:2023-11-28 02:06:08 26 4
gpt4 key购买 nike

我有一个 boost::multi_index_containerhashed_uniquesequenced 索引。我怎样才能从这个容器的最后一个元素中获取第二个元素?

struct MyContainer : public mi::multi_index_container<
MyStruct,
mi::indexed_by<
mi::hashed_unique<
mi::tag<hashed>,
%some stuff%,
%some stuff%,
%some stuff%>
>,
mi::sequenced<mi::tag<sequenced> >
>
>
{ };

由于容器是散列的,我可以通过散列找到任何元素。但就我而言,我不知道倒数第二个元素的哈希值。但是,我知道最后一个元素的哈希值,因此可以获得最后一个元素。

MyContainer::iterator myIter = m_table.find(hashOfLast);

我可以使用这个 myIter 获取指向前一个元素的迭代器吗?

编辑:

我可以做这样的事情吗?

MyContainer::nth_index<1>::type& seqIdx = m_table.get<1>();
auto current = seqIdx.rbegin();
auto last = seqIdx.rend();

if(current != last){
current++;
//How to get the hash of this element now?
}

最佳答案

您可以使用 iterator projection如下:

MyContainer::index<sequenced>::type::iterator it=
m_table.get<sequenced>().end(); // iterator to end of sequenced index
--it;--it; // two steps back
MyContainer::iterator myIter=m_table.project<hashed>(it); // project into the hashed index

请注意,相同的技术可用于倒数第一个位置,这可能使您无需保留 hashOfLast 变量。

Can I use this myIter to get an iterator to the previous element?

不(除非你求助于如上所示的迭代器投影),原因有二:

  • 散列索引迭代器(与序列索引的迭代器不同)不是双向的(可递增和递减),而是向前的(可递增)。
  • 即使 myIter 可以递减,它也不会指向序列索引中倒数第二个位置的元素:两个索引中的遍历顺序完全不相关。

关于c++ - 如何从 multi_index_container 中获取倒数第二个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37372166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com