寻找具有非唯一键或值的双向映射

时间:2017-02-20 23:39:11

标签: c++ containers

我需要一个具有非唯一键或值的双向容器。 multimap不起作用,因为它的单向和boost> :: bimap只允许唯一的键和值。标准或升级库中的任何此类容器?否则:任何用于实现这种结构的指针/文章都将受到赞赏。预计只有100个左右的元素对。任何帮助表示感谢,谢谢,Jeanette

2 个答案:

答案 0 :(得分:2)

你可以使用一对矢量。如果您只有100个元素,则线性搜索完全足以在两个元素元素上进行查找。如果您有更大的集合,或者您经常需要在任何pair元素上使用相等范围,则可以维护单独的索引结构。

(这基本上就是如何实施boost.bimap。)

答案 1 :(得分:0)

实际上boost :: bimap确实允许使用非唯一键:

http://www.boost.org/doc/libs/release/libs/bimap/doc/html/boost_bimap/the_tutorial/differences_with_standard_maps.html

示例:

#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";
}

现场演示:

http://coliru.stacked-crooked.com/a/2efdc80cde5f2933