【问题标题】:Why doesn't boost::fusion::as_set remove duplicates from a boost::fusion::vector?为什么 boost::fusion::as_set 不从 boost::fusion::vector 中删除重复项?
【发布时间】:2013-12-17 23:59:23
【问题描述】:

我有:

auto my_vec2 = boost::fusion::make_vector(42,false,42);
auto my_set2 = boost::fusion::as_set(my_vec2);

当我去调试时,我期望 my_set2 只包含 42 和 false,但它包含 42 两次。为什么是这样?如果它肯定是一组,那么“键”应该是唯一的?

【问题讨论】:

    标签: c++ boost boost-fusion


    【解决方案1】:

    这是你的责任:

    前提条件:不能有重复的键类型。

    (来自this doc

    【讨论】:

    • 好的,我刚收到一个我忘了问的小问题——一组存储排序后的值。如果融合集包含不同的类型,比如一个 int,然后是一个对象的引用——它将如何根据内存地址对对象引用进行排序?
    • 它们只是没有排序。 “就像 MPL 中的关联序列,与 STL 中的关联容器不同,融合关联序列没有隐含的排序关系。” (并且 Fusion set 被定义为关联序列)。混淆是可以理解的,因为它的工作方式与 STL 不同!
    • 好吧,我的困惑是——使用不保证唯一性且不对值进行排序的集合的目的是什么? (对不起,不是无知,只是真的很困惑)
    • 不确定?该集合确实看起来很残缺,但考虑到它必须支持异构数据类型的限制,这可能是他们能做的最好的事情。
    猜你喜欢
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多