00001 #include <iostream>
00002
00003 #define BOOST_TEST_DYN_LINK
00004 #define BOOST_TEST_MODULE "mi"
00005
00006 #include <boost/test/unit_test.hpp>
00007
00008 #include <boost/multi_index_container.hpp>
00009 #include <boost/multi_index/ordered_index.hpp>
00010 #include <boost/multi_index/member.hpp>
00011 #include <boost/multi_index/composite_key.hpp>
00012
00013 BOOST_AUTO_TEST_SUITE(multi_index0)
00014
00015 using namespace boost::multi_index;
00016
00017 struct phonebook_entry {
00018 std::string family_name;
00019 std::string given_name;
00020 std::string phone_number;
00021
00022
00023 phonebook_entry(std::string family_name,
00024 std::string given_name,
00025 std::string phone_number):
00026 family_name(family_name),
00027 given_name(given_name),
00028 phone_number(phone_number) {}
00029
00030 std::string name0() const {
00031 return family_name;
00032 }
00033 std::string name1() const {
00034 return given_name;
00035 }
00036 std::string phone0() const {
00037 return phone_number;
00038 }
00039 };
00040
00041
00042
00043
00044 typedef multi_index_container<
00045 phonebook_entry,
00046 indexed_by<
00047
00048 ordered_non_unique<
00049 composite_key<
00050 phonebook_entry,
00051 member<phonebook_entry,std::string,&phonebook_entry::family_name>,
00052 member<phonebook_entry,std::string,&phonebook_entry::given_name>
00053 >
00054 >,
00055
00056 ordered_unique<
00057 member<phonebook_entry,std::string,&phonebook_entry::phone_number>
00058 >
00059 >
00060 > phonebook;
00061
00062
00063
00064 BOOST_AUTO_TEST_CASE(a0)
00065 {
00066 phonebook pb;
00067 pb.insert(phonebook_entry("White", "Dorothea", "1234567"));
00068 pb.insert(phonebook_entry("Black", "Dorothea", "2234567"));
00069 pb.insert(phonebook_entry("White", "Dorothy", "1234568"));
00070 pb.insert(phonebook_entry("Black", "Dorothy", "2234568"));
00071 pb.insert(phonebook_entry("White", "Albert", "1234569"));
00072 pb.insert(phonebook_entry("Black", "Albert", "2234569"));
00073
00074 phonebook::iterator it = pb.find(boost::make_tuple("White","Dorothea"));
00075 std::string number = it->phone_number;
00076 std::cerr << number << std::endl;
00077
00078 std::pair<phonebook::iterator, phonebook::iterator> p =
00079 pb.equal_range(boost::make_tuple("White"));
00080
00081 for(phonebook::iterator it = p.first; it!=p.second; ++it) {
00082 std::string number = it->phone_number;
00083 std::cerr << number << std::endl;
00084 }
00085 }
00086
00087 BOOST_AUTO_TEST_SUITE_END()
00088