查找 bimap 中重复元素的所有键
Find all the keys of repeated element in bimap
我想访问 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 声明中两次 typed-out 实际类型名称相比,别名只是使下一行更易于阅读。
更简单的解决方案是使用自动。
equal_range
是multiset的一个成员函数,在bimap的右边。它 returns a std::pair 包含多重集中等于指定键的元素的开始和结束迭代器,供您以正常方式迭代。
我想访问 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 声明中两次 typed-out 实际类型名称相比,别名只是使下一行更易于阅读。
更简单的解决方案是使用自动。
equal_range
是multiset的一个成员函数,在bimap的右边。它 returns a std::pair 包含多重集中等于指定键的元素的开始和结束迭代器,供您以正常方式迭代。