我对Boost :: bimap有疑问,无法从boost文档中找到答案。
using AToBBimap = boost::bimap< boost::bimaps::unordered_set_of<CString>, boost::bimaps::multiset_of<CString> >; //hashed bimap
using AToBBimapValueT = AToBBimap ::value_type;
AToBBimap bi_map;
bi_map.insert(AToBBimapValueT{"message1", "value"});
bi_map.insert(AToBBimapValueT{"message2", "value"});
bi_map.right.find("value");
问题:使用bi_map.right.find("value")
似乎只能使迭代器到达{"message1", "value"}
,是否可以像[{"message1", "value"}, {"message2", "value"}]
一样获得两个匹配项的列表?
答案 0 :(得分:1)
答案是equal_range("value")
,就像std::multiset
和std::multimap
一样。
该成员返回一对迭代器,可以方便地与Boost的迭代器范围工厂兼容,因此您可以使用它:
for (auto p : boost::make_iterator_range(bi_map.right.equal_range("value")))
do something with p.second;