Пожалуйста, предоставьте мне заглушку boost-multi-index - с помощью std :: cout - PullRequest
0 голосов
/ 08 марта 2011

Я копаю сеть и голову для мультииндекса, но я не нашел простого примера. Кто-нибудь может предоставить мне небольшой код, такой как multi_index_container with-single_index - найти что-нибудь и найти значение?

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Я просто скопирую и вставлю код из вашего другого, почти дублирующего вопроса :

#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;
}
0 голосов
/ 08 марта 2011
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.Он дает вам пару итераторов, которые отмечают диапазон, содержащий значения для данного ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...