gpt4 book ai didi

c++ - 查找 bimap 中重复元素的所有键

转载 作者:行者123 更新时间:2023-11-28 01:53:41 25 4
gpt4 key购买 nike

我想访问 bimap 中重复元素的所有键。我在下面有一些示例代码

#include <string>
#include <iostream>
#include <utility>
#include <boost/bimap.hpp>
#include <boost/bimap/set_of.hpp>
#include <boost/bimap/multiset_of.hpp>

namespace bimaps = boost::bimaps;
typedef boost::bimap<bimaps::set_of<unsigned long int>,
bimaps::multiset_of<unsigned long int > > bimap_reference;
typedef bimap_reference::value_type position;
bimap_reference numbers;

int main()
{
numbers.insert(position(123456, 100000));
numbers.insert(position(234567, 80000));
numbers.insert(position(345678, 100000));
numbers.insert(position(456789, 80000));


auto it = numbers.right.find(100000);
std::cout<<"numbers:"<<it->first<<"<->"<<it->second<<std::endl;
return 0;
}

在上面的代码中,我在右侧重复了元素。上面的代码给了我元素 100000 的第一个键,即 123456 <--> 100000 。但是我还有一个元素 100000 的条目,如何访问重复元素的所有键(该元素可能多次出现,左侧有唯一键)。

最佳答案

使用multiset::equal_range在右侧。

通过这种方式,您可以获得从第一次出现到最后一次出现的迭代器范围,然后您需要对其进行迭代。

using ritr = bimap_reference::right_const_iterator;

std::pair<ritr, ritr> range = numbers.right.equal_range(100000);

for (auto itr = range.first; itr != range.second; ++itr)
{
...
}


编辑:

using ritr 语句使 ritr 成为实际类型的别名。它等同于您在更高层使用的 typedef

与我在 std::pair 声明中输入两次实际类型名称相比,别名只是让下一行更容易阅读。

更简单的解决方案是使用自动。

equal_range 是 multiset 的成员函数,位于 bimap 的右侧。它返回一个 std::pair,其中包含等于指定键的多重集中元素的开始和结束迭代器,以便您以正常方式进行迭代。

关于c++ - 查找 bimap 中重复元素的所有键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41995561/

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