允许指定单独比较器和排序函子的关联容器

Associative container that allows specification of seperate comparator and ordering functor

本文关键字:关联 排序 许指定 单独 比较器      更新时间:2023-10-16

我正在寻找一个容器,允许我为排序和等效指定单独的函数。std::set允许指定1个比较器功能。理想情况下,我想根据一个标准进行排序,但在搜索整个集合时,我想使用另一个标准进行匹配。我通过使用一个map来破解这个解决方案,该map存储插入到集合中的迭代器。但我想知道是否有更好的方法。

试试boost::multi_index_container: http://www.boost.org/doc/libs/1_53_0/libs/multi_index/doc/index.html

Boost多索引容器库提供了一个类模板命名为multi_index_container,它允许构造维护一个或多个具有不同排序和索引的容器获取语义。索引提供了类似于STL的接口容器,使使用它们变得熟悉。多索引的概念在相同的元素集合上从关系中借用数据库术语,允许对复杂数据进行规范结构在多重索引关系表的精神,其中简单的集合和地图是不够的。一个广泛的选择指数是仿照类似的STL容器,如std::set;Std::list和哈希集

提振。MultiIndex具有额外的功能,如子对象元素的搜索、范围查询和就地更新使它成为std::set和set::multiset的方便替代品当不需要多索引功能时。

它完全支持您正在寻找的内容。

要么使用两个容器(手动保持同步),要么使用boost::multi_index

由于set中的元素永远不会被重新定位,迭代器也永远不会失效,因此使用key->iterator的映射的解决方案可能与任何其他双容器解决方案一样好。你也可以存储一个key->指针的映射。

当然,您也可以只使用std::set,并使用std::findstd::find_if搜索元素。搜索所需的时间与集合的大小成线性关系。