【问题标题】:Please provide me a stub of boost-multi-index - with std::cout请给我一个 boost-multi-index 的存根 - 带有 std::cout
【发布时间】:2011-03-08 11:46:16
【问题描述】:

我正在为多索引挖掘网络和头部,但我没有找到任何简单的示例。谁能给我一个像 multi_index_container with-single_index 这样的小代码-找到一些东西并计算出价值吗?

【问题讨论】:

标签: c++ visual-c++ boost logic


【解决方案1】:

我将复制并粘贴来自your other, near-duplicate question 的代码:

#include <string>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/member.hpp>

struct EnumStruct
{
    EnumStruct(int const me, std::string const& mes, int const le, std::string const& les)
      : microsoftEnum(me),
        microsoftEnumString(mes),
        localEnum(le),
        localEnumString(les)
    { }

    int microsoftEnum;
    std::string microsoftEnumString;
    int localEnum;
    std::string localEnumString;
};

namespace bmi = boost::multi_index;

struct localEnum_t;

typedef bmi::multi_index_container<
    EnumStruct,
    bmi::indexed_by<
        bmi::ordered_unique<
            bmi::tag<localEnum_t>,
            bmi::member<EnumStruct, int, &EnumStruct::localEnum>
        >
    >
> boost_Enum_Container;

int main()
{
    boost_Enum_Container enumStructContainer;
    enumStructContainer.insert(EnumStruct(1, "MS_1", 11, "LOC11"));
    enumStructContainer.insert(EnumStruct(2, "MS_2", 22, "LOC22"));
    enumStructContainer.insert(EnumStruct(3, "MS_3", 33, "LOC33"));
    boost_Enum_Container::index_iterator<localEnum_t>::type iter = enumStructContainer.get<localEnum_t>().find(22);
    if (iter != enumStructContainer.get<localEnum_t>().end())
        std::cout << "found, localEnumString == " << iter->localEnumString << std::endl;
    else
        std::cout << "didn't find anything" << std::endl;
}

【讨论】:

    【解决方案2】:
    BOOST_FOREACH(type &i, container.equal_range(key))
        std::cout << i << std::endl;
    

    显然有任意数量的元素具有给定的键,所以这可以打印任意数量的行,包括零。

    std::pair<iterator, iterator> range = container.equal_range(key);
    if(range.first == range.second)
        std::cout << "Nothing for " << key << std::endl;
    else
        std::cout << "First for " << key << " is " << *range.first << std::endl;
    

    这就是 equal_range 的工作原理。它为您提供了一对迭代器,用于标记包含给定键值的范围。

    【讨论】:

    • 这如何说明 boost::multi_index?
    • 公平地说,如果您有一个名为containermulti_index_container,则此代码或多或少是所请求的。具体来说,它使用容器中的第一个(第 0 个)索引进行查找操作。
    猜你喜欢
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多