ソートされたマップに最も近い値のキーを探したい。たとえば、次の希望値50が他よりも第2の位置に近いほど、コメントで述べたようC++与えられた値に最も近い値を持つマップのキーを見つける方法
#include <iostream>
#include <map>
int main()
{
std::map<int,int> mymap;
mymap[1]=10;
mymap[2]=40;
mymap[3]=100;
mymap[4]=200;
mymap[5]=500;
int wantedvalue=50;
int wantedindex=mymap.whatshouldIdohere(wantedvalue);
std::cout<<"The closest value of "<<wantedvalue<<" in the map is located";
std::cout<<" on "<<wantedindex<<" and is "<<mymap[wantedindex]<<std::endl;
//Should be:
//The closest value of 50 in the map is located on 2 and is 40
return 0;
}
コードは、へのインデックスを返すべきです。
私はこれを行う方法がありますか?
PS: "for"があり、指定された値より大きな値を見つけたらマップ全体を検索して停止することができますが、この最悪の実行時間はテーブル全体を検索することです。また、これを何度も実行する必要があるので、私はこれよりも優れたものを探しています。
です。 – Slava
"私はこれよりも優れたものを探しています。"適切な容器を使用する。 'std :: map'はここでは適していません – Slava
これを頻繁に行う必要がある場合は、プレーンマップがあなたのニーズに合った最良のデータ構造ではないかもしれません。 'boost :: bimap'を実行することができます。 – StoryTeller