libsavaのKDTree

libsava の KDTree に何が実装されているのかもう少し詳しく見てみた

KDTree コンテナクラスのpublicメンバ関数

挿入

insert

点 (このパッケージが用意しているPoint型、またはその派生型) と値のペアをコンテナに加える。std::map のinsertと仕様をあわせたものと、独自のものの2通りのオーバーロードがある

クエリ

begin, end

画像のラスター走査(左上→右下)のような順で格納されている点を走査できる。beginの引数として左上の座標と右下の座標を指定できて、その指定された範囲に限定して走査できる?

find

指定された点がコンテナ内に存在すればそのイテレータ、なければendを返す。
スピードはあまり早くない。getを使ったほうがスピードは速い、とのこと

get

指定された点がコンテナ内に存在すればその値を取得できる

empty

コンテナ内に点と値のペアが一つでもあればfalse、空だったらtrueを返す

[]

std::mapと同様に、値を取得したり、新たに点と値のペアを加えることができる。

削除

remove

指定した点を削除。削除した点と関連づけられていた値を取得することもできる

erase

removeと同様。STLとあわせるために存在している?

clear

木に存在する点と値のペアを全て空にする

その他

optimize

木を最適化する

... あれ、指定された点とコンテナ中の点のユークリッド距離の近い順に取ることができるっていう関数(k最近傍探索とかいうそうです)がない?これが欲しかったのにorz

キーワード: 空間インデックス KDTree C++ STL アルゴリズム ライブラリ