c++ - 在仿函数的 c'tor 中搜索值

标签 c++ constructor initialization functor

假设我有一个 std::vector<std::pair<int, std::vector<int> > > ,即包含成对的整数到 vector 的 vector 。 (我知道我可以用 map 实现同样的目标,但这不是我要的)

我如何使用 STL 搜索 int(一对中的一个)?我写了一个可行的解决方案:

struct FindFirst {
    FindFirst(int i) : toFind(i) { }
    int toFind;
    bool operator() 
        ( const std::pair<int, std::vector<int> > &p ) {
            return p.first==toFind;
    }
};

可以这样使用:

int valueToFind = 4;
std::find_if(myVec.begin(), myVec.end(), FindFirst(valueToFind));

但在我看来,这有点丑陋;一定会有更好的办法。 那么,是否有更好的方法可以使用 C++0x 或 Boost 中的任何东西来做到这一点? (因为我正在努力学习最好的方法,而且我强调,只有 STL)

编辑: 看起来我的要求有点困惑。我更感兴趣的是,在仿函数上使用构造函数搜索值是否是一种不好的做法,尤其是当它们用于 STL 算法时。

最佳答案

当只使用 STL 时,这是最好的方法。您到底不喜欢它的什么地方(除了冗长)?

它用途广泛,因为您可以与其他算法一起使用,例如 std::binary_search

它非常简单和直接(至少对于习惯了 C++ 仿函数的人来说)。

这里唯一真正需要改进的是数据结构的选择。 std::map 涵盖了此类用例,您还没有解释为什么不能使用它。我知道对于您的实际问题, map 可能真的不适合,但在那种情况下,您的示例并不代表您的实际问题。你应该解决这个问题。

关于c++ - 在仿函数的 c'tor 中搜索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910590/

相关文章:

java - 将指针转换为字符串并作为字符数组发送无法正常工作

c++ - 如何防止特定的 DLL 加载到我的进程中

java - Java新手,尝试使用日期作为属性

c++构造函数-如何在没有new的情况下进行初始化?

java - 为什么 Java 构造函数中有 return

c++ - 使用了未初始化的局部变量 'r'

c++ - 尝试在类定义中声明数组时出错

c++ - 在 Mac OSX 下找不到 hash_map header

c++ - 如何设置eclipse c++生成多个可执行文件

variables - 时间扭曲变量初始化?