multi_index_container 続き。
名前と年齢を持った構造体Personを multi_index_containerを使って、名前と年齢それぞれをキーにして検索ができるようにしてみる。(ちなみに名前はユニークであるとする)
multi_index_container - 基本
まず、multi_index_containerの型は以下のようになる。
そしてmulti_index_containerオブジェクトを実際に操作するときには以下のようにする。
ということで続く。
struct Person {
std::string name;
int age;
};
typedef multi_index_container<
Person, // Person を管理
indexed_by<
ordered_unique< // 第0インデックス(name がキー。またnameは ユニーク)
member<Person, std::string, &Person::name>
>,
ordered_non_unique< // 第1インデックス (ageがキー。ageは重複してよい)
member<Person, int, &Person::age>
>
>
> C;
いきなり泣きそうなくらい大量のテンプレート引数だが、大まかには以下のようにコンテナに格納する要素の型を最初に指定して、残りは検索のためのインデックスの型を好きなだけずらずらと並べているだけだ。multi_index_container<
要素の型,
indexed_by<
インデックス0の指定,
...,
インデックスNの指定
>
>
そしてmulti_index_containerオブジェクトを実際に操作するときには以下のようにする。
C c;
// 要素の追加
c.insert(Person("foo", 31));
c.insert(Person("bar", 30));
c.insert(Person("xxx", 4));
// 0番目のインデックス(nameがキー)を取得
typedef C::nth_index<0>::type NameIndex;
NameIndex& name_index = c.get<0>();
// NameIndexは std::set<> とほぼ同じインターフェースを持つ
// "foo"を検索して削除
NameIndex::iterator it = name_index.find("foo")
if (it != name_index.end()) {
name_index.erase(it);
}
// 年齢順にソートして出力
std::copy(c.get<1>().begin(), c.get<1>().end(), std::ostream_iterator<Person>(std::cout, ","));
つまり、multi_index_container::get<インデックス番号>() を呼び出すことで、
std::set(またはstd::multiset)とほぼ同じインターフェースをもったオブジェクトの参照を返してくれるので、これを通常のsetのような感覚で扱えばOKととなっている。当然そのオブジェクトのもつイテレータはそのインデックスでのキーによって整列されている。ということで続く。
- 2004.12.16 Thursday 02:55
- Category: C++(boost - multi_index_container)
- comments (23)
- -
Comments
klicrnwq http://www.ghson62bwb788957xec0n3m461i196tys.org/
<a href="http://www.ghson62bwb788957xec0n3m461i196tys.org/">aklicrnwq</a>
[url=http://www.ghson62bwb788957xec0n3m461i196tys.org/]uklicrnwq[/url]
?酒?口?? http://blog.sina.com.cn/u/2935232180
深??田木材?口?? http://booyu49a.cn.gongchang.com/
http://www.trioboomerang.nl/nike-air-huarache-sale-051.htm
http://www.rockstarschool.es/457-zapatos-adidas-2016-mujer.php
http://www.cantores-minores.de/adidas-slvr-220.htm
http://www.cigarrilloselectronicosmadrid.es/190-nike-huarache-mujer-moradas.html
http://www.giochidipolizia.it/stan-smith-adidas-zebra-38-396.html
<a href=http://www.vakantieboerderijtedrenthe.nl/914-nike-air-max-goede-schoenen.php>Nike Air Max Goede Schoenen</a>
<a href=http://www.chris-musikbox.de/019-nike-thea-beige-gÃnstig.php>Nike Thea Beige GÃnstig</a>
<