c++ - 如何仅使用一个键来使用 std::binary_search ?

标签 c++ stl binary-search

我有一些数据存储在排序的 vector 中。该 vector 按某个键排序。我知道 STL 有一个算法来检查一个元素是否在这个排序列表中。这意味着我可以这样写:

struct MyData { int key; OtherData data; };
struct MyComparator
{
  bool operator()( const MyData & d1, const MyData & d2 ) const
  {
    return d1.key < d2.key;
  }
};

bool isKeyInVector( int key, const std::vector<MyData> &v )
{
   MyData thingToSearchFor;
   thingToSearchFor.key = key;
   return std::binary_search( v.begin(), v.end(), thingToSearchFor, MyComparator() );
}

但是我发现“thingToSearchFor”对象的构造不够优雅。有没有更好的办法?类似这样的东西?

struct MyComparator2
{
  bool operator()( const MyData & d1, const MyData & d2 ) const
  {
    return d1.key < d2.key;
  }
};

bool isKeyInVector2( int key, const std::vector<MyData> &v )
{
   return std::binary_search( v.begin(), v.end(), key, MyComparator2() );
}

最佳答案

做:

struct MyComparator
{
    bool operator()(int d1, const MyData & d2) const
    {
        return d1 < d2.key;
    }

    bool operator()(const MyData & d1, int d2) const
    {
        return d1.key < d2;
    }
};

谓词的调用方式类似于pred(value, ...)pred(..., value),所以直接取值即可。

关于c++ - 如何仅使用一个键来使用 std::binary_search ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474857/

相关文章:

C++ 错误 : Conversion to Non-Scalar Type

c - 二分查找在 C 中不起作用

c++ - 在使用 PIN 的模拟器上对 Pthread 进行安全编程

c++ - extern "C"extern 变量在 C++ 程序中作为类变量寻求..如何声明它?

c++ - 我可以在没有鼠标事件的情况下获取 OpenCV 中的鼠标位置吗?

data-structures - 什么是二分插值搜索?

java - ArrayList BinarySearch

C++ 找到尽可能接近给定 xy 的 n 个点

c++ - 如何创建一个将从输入流中读取下一个值的仿函数?

c++ - 将 CStringArray 的内容复制到 std::vector