我需要一个具有非唯一键或值的双向容器。 multimap不起作用,因为它的单向和boost> :: bimap只允许唯一的键和值。标准或升级库中的任何此类容器?否则:任何用于实现这种结构的指针/文章都将受到赞赏。预计只有100个左右的元素对。任何帮助表示感谢,谢谢,Jeanette
答案 0 :(得分:2)
你可以使用一对矢量。如果您只有100个元素,则线性搜索完全足以在两个元素元素上进行查找。如果您有更大的集合,或者您经常需要在任何pair元素上使用相等范围,则可以维护单独的索引结构。
(这基本上就是如何实施boost.bimap。)
答案 1 :(得分:0)
实际上boost :: bimap确实允许使用非唯一键:
示例:强>
#include <boost/bimap.hpp>
#include <boost/bimap/multiset_of.hpp>
#include <string>
#include <iostream>
namespace bm = boost::bimaps;
int main()
{
using mybimap = bm::bimap< bm::multiset_of<std::string>, int >;
mybimap map;
map.left.insert( mybimap::left_value_type( "orange", 1 ) );
map.left.insert( mybimap::left_value_type( "apple", 42 ) );
map.left.insert( mybimap::left_value_type( "orange", 7 ) );
auto rng = map.left.equal_range( "orange" );
for( auto it = rng.first; it != rng.second; ++it )
std::cout << it->first << ": " << it->second << "\n";
}
现场演示: