上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
 
intをキーとしたstd::mapを作っといて、
そのmapから、任意のキー(key)に一番近いキーのデータを引っ張ってくるってのをやるために、
lower_boundとupper_boundつかって

iterator l_it;
iterator u_it;

l_it = map.lower_bound(key);
u_it = map.upper_bound(key);

if(abs(l_it->first - key) < abs(u_it->first - key))
{
    return l_it->second;
}
else
{
    return u_it->second;
}

的なことをやろうとしたんだけどうまくいかない。
どううまくいかないかっていうと、
key以上の要素しか返ってこない。

あれ?と思ってリファレンス見てみると・・・
lower_bound
キーが特定の値以上である最初の要素を指すイテレータを返す

upper_bound
キーが特定の値を越える最初の要素を指すイテレータを返す

ああ、どっちも上側を返すのね。
言われてみれば、
round(丸める)じゃなくてbound(境界)だもんね。

これ意味あるのかよ!とも思ったけど、
multimapとかならたしかに必要か。

というわけで修正。

iterator l_round_it;
iterator u_round_it;

u_round_it = map.lower_bound(key);
l_round_it = u_round_it;
l_round_it--;

if(abs(l_round_it->first - key) < abs(u_round_it->first - key))
{
    return l_round_it->second;
}
else
{
    return u_round_it->second;
}

みたいな感じ。

※ソースはイメージです。そのままだと実際にはコンパイル通りません。
特にiteratorの型らへん。
 

<< MIRROR'S EDGE | Home | FireFoxのAdblockアドオンを使ってGoogle Analyticsのブロック >>

コメント

コメントの投稿

URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 

トラックバック


この記事にトラックバックする(FC2ブログユーザー)


 BLOG TOP 


template and material by HPテンプレート素材集IFD
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。