を使用する必要はありませんがstd::vector<>
、最初にデータを適切なデータ型に変換すると最も簡単です。
#include <cstdint>
struct mystruct
{
std::int64_t first, second;
};
このデータを現在どのように保存しているかについての質問は不明ですが、上記のようなものだと思います。
operator<
次に、データ型をオーバーロードできます。
#include <algorithm>
bool operator <(mystruct const& ms, std::int64_t const i)
{
return ms.first < i;
}
int main()
{
mystruct mss[10] = { /*populate somehow*/ };
std::int64_t search_for = /*value*/;
mystruct* found = std::lower_bound(mss, mss + 10, search_for);
}
または、カスタム コンパレータを定義して、それを に渡すこともできますstd::lower_bound
。
#include <algorithm>
struct mystruct_comparer
{
bool operator ()(mystruct const& ms, std::int64_t const i) const
{
return ms.first < i;
}
};
int main()
{
mystruct mss[10] = { /*populate somehow*/ };
std::int64_t search_for = /*value*/;
mystruct* found = std::lower_bound(mss,
mss + 10,
search_for,
mystruct_comparer());
}
当然のことながら、C++11 では、コンパレーターの本格的なファンクターの代わりにラムダを使用できます。