在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::p air 声明中两次键入实际类型名称更容易阅读。
甚至更简单的解决方案是使用自动。
equal_range
是位于双映射右侧的多重集的成员函数。它返回一个 std::p air,其中包含多集中等于指定键的元素的开始和结束迭代器,以便您以正常方式迭代。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何在c++中只将键插入到bimap的一侧
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 在bimap中找到重复元素的所有键